рдкрд░рд┐рдЪрдп
рдЕрдкрд╛рдЪреЗ рдХреИрдорд▓ рдореЙрдбрд▓ рдорд╛рд░реНрдЧреЛрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ рд╕реНрдЯреЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдлрд╝рд╛рдЗрд▓ рдореЗрдВ) рдпрд╛ рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд░рд╣рд╛ рд╣реЛред рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдХрд╛рд░рд╡рд╛рдВ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╣реИрдВ, рд╕рдВрдпреЛрдЧ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрд╕реЗрд╕рд░, рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕, рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рдФрд░ рдЕрдиреНрдп рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдореЗрдВ рдЧрд┐рд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдВрддрддрдГ рдЖрдкрдХреЛ рдПрдХ рд╣реА рдЖрд╡реЗрджрди рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдпрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рднрдВрдбрд╛рд░рдг рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреИрдорд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрддреНрдо-рдирд┐рд╣рд┐рдд рдврд╛рдВрдЪрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЕрдХреНрд╕рд░ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдХреЛрдб рднреА рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ - рдмрд╕ рд╕рд╣реА рдорд╛рд░реНрдЧ рдбрд╛рдпрд▓ рдХрд░реЗрдВ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
рддреЛ рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдерд╛ред рд╣рдо рдКрдБрдЯреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдХрдИ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ, рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╕рдордп рдкрд░ рд╕реВрдЪрдирд╛ рджреЗрдиреЗ, рдПрдХрддреНрд░рд┐рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд╕реНрд▓рд╛рдЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдФрд░ "рд╕реБрдкрд╛рдЪреНрдп" рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдкреНрд░рд╡рд╛рд╣ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдкреНрд░рддрд┐ рдорд┐рдирдЯ рд╣рдЬрд╛рд░реЛрдВ рд╕рдВрджреЗрд╢), рдЗрд╕рд▓рд┐рдП рд╣рдо рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ, рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реИред рд╣рд░ рджрд┐рди рдПрдХ рдорд┐рд▓рд┐рдпрди рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдг рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рд░ рдЕрдзрд┐рдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред
рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЗрддрдиреА рдорд╛рддреНрд░рд╛ рдХреЛ "рдЖрддреНрдорд╕рд╛рдд" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХрддреНрд░реАрдХрд░рдг рдХреА рд░рдгрдиреАрддрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдЧрд╛рдорд┐рддрд┐ рд╕реЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реЗрд╡рд╛ рдХреА рдХрдо рд╕реЗ рдХрдо рдмреБрдирд┐рдпрд╛рджреА рдХреНрд╖реИрддрд┐рдЬ рдорд╛рдкрдиреАрдпрддрд╛ рдФрд░ рджреЛрд╖ рд╕рд╣рдирд╢реАрд▓рддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рд╣рдо ActiveMQ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдФрд░ рд╣реЗрдЬрд╝реЗрд▓рдХрд╛рд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдСрдирд▓рд╛рдЗрди рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╕реНрдХреЗрд▓рд┐рдВрдЧ
рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рд╕рд╣рдХрд░реНрдореА рд╕рд░реНрд╡рд░реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ActiveMQ рдмреНрд░реЛрдХрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рд░рд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХрддрд╛рд░ рдореЗрдВ HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред HTTP рд╣реИрдВрдбрд▓ рдПрдХ рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рдкреАрдЫреЗ рд╕реНрдерд┐рдд рд╣реИрдВ рдЬреЛ рд▓рд╛рдЗрд╡ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдЗрдирдкреБрдЯ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдХреЛ рдПрдХ рдХреИрдорд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реЗрдЬрд╝реЗрд▓рдХрд╛рд╕реНрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░реЗрдВред ActiveMQ рднреА NetworkConnectors рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ "рд╕рд╛рдЭрд╛" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдЬреИрд╕рд╛ рдХрд┐ рдЖрд░реЗрдЦ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рд╡рд┐рдлрд▓рддрд╛ рдЙрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рддрддреНрд╡реЛрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХрд┐рд╕реА рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рд╣реИрдВрдбрд▓рд░ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ ActiveMQ рдЕрдкрдиреА рдХрддрд╛рд░реЛрдВ рд╕реЗ рджреВрд╕рд░реЛрдВ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ ActiveMQ рджрд▓рд╛рд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрдбрд╝реЛрд╕реА рдкрд░ рд╣реИрдВрдбрд▓рд░ "рд╣реБрдХ" рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рдкреВрд░рд╛ рд╕рд░реНрд╡рд░ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрд╛рдХреА рд╕рд░реНрд╡рд░ рдкрд╕реАрдиреЗ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣реЗрдЬрд╝реЗрд▓рдХрд╛рд╕реНрдЯ рдиреЛрдбреНрд╕ рдЕрдкрдиреЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдбреЗрдЯрд╛ рдХреА рдмреИрдХрдЕрдк рдкреНрд░рддрд┐рдпрд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ (рдкреНрд░рддрд┐рдпрд╛рдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдкрд░ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рд╣реИ)ред
рдпрд╣ рдпреЛрдЬрдирд╛ рдЖрдкрдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЧрдд рдХреЗ, рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд░реНрд╡рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
рд╡рд┐рддрд░рд┐рдд рдПрдЧреНрд░реАрдЧреЗрдЯрд░реНрд╕
рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЕрдкрд╛рдЪреЗ рдХреИрдорд▓ рдореЗрдВ " рдПрдХрддреНрд░реАрдХрд░рдг рднрдВрдбрд╛рд░ " рдФрд░ " рд╕рд╣рд╕рдВрдмрдВрдз рдХреБрдВрдЬреА " рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдкрд╣рд▓рд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИ рдЬрд╣рд╛рдВ рдПрдХрддреНрд░рд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐ рджрд┐рди рдЧрд┐рд░рд╛рдП рдЧрдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛)ред рджреВрд╕рд░рд╛ рд░рд╛рдЬреНрдп рджреНрд╡рд╛рд░рд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреБрдВрдЬреА рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╕рд╣рд╕рдВрдмрдВрдз рдХреБрдВрдЬреА рдПрдХрддреНрд░реАрдХрд░рдг рднрдВрдбрд╛рд░ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрддрдорд╛рди рддрд┐рдерд┐)ред
рд╕рдорд╛рди рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдЧреНрд░реАрдЧреЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреА рдПрдХрддреНрд░реАрдХрд░рдг рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╣реЗрдЬрд╝реЗрд▓рдХрд╛рд╕реНрдЯ рдореЗрдВ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рднреАрддрд░ рд╕рдорд╛рди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдореЗрдВ рдорд╛рдирдХ рдХреИрдорд▓ рдкреИрдХреЗрдЬ рдореЗрдВ рдРрд╕реА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рдорд┐рд▓реАред рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рд▓рд╛рдн рдХрд╛рдлреА рд╕рд░рд▓ рдирд┐рдХрд▓рд╛ - рдмрд╕ рдПрдЧреНрд░реАрдЧреЗрд╢рди рд░рд┐рдкреЗрд╕реЗрдлрд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
public class HazelcastAggregatorRepository implements AggregationRepository { private final Logger logger = LoggerFactory.getLogger(getClass()); // maximum time of waiting for the lock from hz public static final long WAIT_FOR_LOCK_SEC = 20; private final HazelcastInstance hazelcastInstance; private final String repositoryName; private IMap<String, DefaultExchangeHolder> map; public HazelcastAggregatorRepository(HazelcastInstance hazelcastInstance, String repositoryName){ this.hazelcastInstance = hazelcastInstance; this.repositoryName = repositoryName; } @Override protected void doStart() throws Exception { map = hazelcastInstance.getMap(repositoryName); } @Override protected void doStop() throws Exception { /* Nothing to do */ } @Override public Exchange add(CamelContext camelContext, String key, Exchange exchange) { try { DefaultExchangeHolder holder = DefaultExchangeHolder.marshal(exchange); map.tryPut(key, holder, WAIT_FOR_LOCK_SEC, TimeUnit.SECONDS); return toExchange(camelContext, holder); } catch (Exception e) { logger.error("Failed to add new exchange", e); } finally { map.unlock(key); } return null; } @Override public Exchange get(CamelContext camelContext, String key) { try { map.tryLock(key, WAIT_FOR_LOCK_SEC, TimeUnit.SECONDS); return toExchange(camelContext, map.get(key)); } catch (Exception e) { logger.error("Failed to get the exchange", e); } return null; } @Override public void remove(CamelContext camelContext, String key, Exchange exchange) { try { logger.debug("Removing '" + key + "' tryRemove..."); map.tryRemove(key, WAIT_FOR_LOCK_SEC, TimeUnit.SECONDS); } catch (Exception e) { logger.error("Failed to remove the exchange", e); } finally { map.unlock(key); } } @Override public void confirm(CamelContext camelContext, String exchangeId) { /* Nothing to do */ } @Override public Set<String> getKeys() { return Collections.unmodifiableSet(map.keySet()); } private Exchange toExchange(CamelContext camelContext, DefaultExchangeHolder holder) { Exchange exchange = null; if (holder != null) { exchange = new DefaultExchange(camelContext); DefaultExchangeHolder.unmarshal(exchange, holder); } return exchange; } }
рдЗрд╕ рддрд░рд╣ рдХреЗ рднрдВрдбрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рд╣реЗрдЬрд╝реЗрд▓рдХрд╛рд╕реНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рд╣реЗрдЬрд╝реЗрд▓рдХрд╛рд╕реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рдХрд╛ рдЕрдкрдирд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрдерд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдирд╛рдо рднреА рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣реЗрдЬрд╝реЗрд▓рдХрд╛рд╕реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рдЖрдкрдХреЛ рдЙрди рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╡рд┐рддрд░рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдЧреНрд░реАрдЧреЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХрддреНрд░реАрдХрд░рдг рд╣реЛрдЧрд╛ред
рд╡рд┐рддрд░рд┐рдд рдЯрд╛рдЗрдорд░
рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд░рд╛рдЬреНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛рдлреА рдмрдбрд╝реА рд╣реИред рд▓реЗрдХрд┐рди рдЗрди рд╕рднреА рдХреА рд▓рдЧрд╛рддрд╛рд░ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рд░рд╛рдЬреНрдп (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдХреА рд╕реНрдерд┐рддрд┐ рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЙрдирдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рдереЗ) рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдРрд╕реЗ рд░рд╛рдЬреНрдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЕрдкреНрд░рдЪрд▓рди рдХреЗ рд▓рд┐рдП рдПрдЧреНрд░реАрдЧреЗрдЯрд░реНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдХ рдЖрд╡рдзрд┐рдХ рдХрд╛рд░реНрдп рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреИрдорд▓ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХрдИ рд╕рд╣рдХрд░реНрдореА рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордп-рд╕рдордп рдкрд░ рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣реЗрдЬрд╝рд▓рдХрд╛рд╕реНрдЯ рддрд╛рд▓реЗ рдХреА рдорджрдж рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЗрдХрд┐рди рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╛ рдмрд▓реНрдХрд┐, рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?
рд╣рдо рдКрдВрдЯ рд╕рдВрджрд░реНрдн рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдиреНрдп рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреНрд╡рд╛рд░реНрдЯрд░ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рд╢реЗрдбреНрдпреВрд▓рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕рдХреЗ рд╕реНрд╡рдд: рд▓реЙрдиреНрдЪ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдШреЛрд╖рд┐рдд:
<bean id="quartz" class="org.apache.camel.component.quartz.QuartzComponent"> <property name="autoStartScheduler" value="false"/> </bean>
рджреВрд╕рд░реЗ, рдЖрдкрдХреЛ рдХрд╣реАрдВ рдФрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдФрд░ рд╢реЗрдбреНрдпреВрд▓рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреЗрд╡рд▓ рддрднреА рдЬрдм рдЖрдк рд▓реЙрдХ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рдФрд░ рдлрд┐рд░ рдЙрд╕рдХреЗ рдХреИрдкреНрдЪрд░ рдХреЗ рдЕрдЧрд▓реЗ рдХреНрд╖рдг рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ (рдпрджрд┐ рдкрд┐рдЫрд▓реЗ рд╕рд░реНрд╡рд░ рдиреЗ рд▓реЙрдХ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдпрд╛ рдЕрд╕рдлрд▓ рд░рд╣рд╛ рддреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЗрд╕реЗ рдЬрд╛рдиреЗ рджреЗрдВ)ред рдЗрд╕реЗ рд╡рд╕рдВрдд рдореЗрдВ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рдирд▓рд┐рд╕реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЬреЛ рдЖрдкрдХреЛ рд╕рдВрджрд░реНрдн рдЯреНрд░рд┐рдЧрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
<bean class="com.my.hazelcast.HazelcastQuartzSchedulerStartupListener"> <property name="hazelcastInstance" ref="hazelcastInstance"/> <property name="quartzComponent" ref="quartz"/> </bean>
рд╣рдореЗрдВ рдЕрдиреБрд╕реВрдЪрдХ рдЖрд░рдВрднреАрдХрд░рдг рд╡рд░реНрдЧ рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
public class HazelcastQuartzSchedulerStartupListener implements ShutdownPrepared, ApplicationListener { public static final String DEFAULT_QUARTZ_LOCK = "defaultQuartzLock"; protected volatile boolean initialized = false; Logger log = LoggerFactory.getLogger(getClass()); Lock lock; protected volatile boolean initialized = false; protected String lockName; protected HazelcastInstance hazelcastInstance; protected QuartzComponent quartzComponent; public HazelcastQuartzSchedulerStartupListener() { super(); log.info("HazelcastQuartzSchedulerStartupListener created"); } public void setLockName(final String lockName) { this.lockName = lockName; } public synchronized Lock getLock() { if (lock == null) { lock = hazelcastInstance.getLock(lockName != null ? lockName : DEFAULT_QUARTZ_LOCK); } return lock; } @Override public void prepareShutdown(boolean forced) { unlock(); } @Required public void setQuartzComponent(QuartzComponent quartzComponent) { this.quartzComponent = quartzComponent; } @Required public void setHazelcastInstance(HazelcastInstance hazelcastInstance) { this.hazelcastInstance = hazelcastInstance; } @Override public synchronized void onApplicationEvent(ApplicationEvent event) { if (initialized) { return; } try { while (true) { try { getLock().lock(); log.warn("This node is now the master Quartz!"); try { quartzComponent.startScheduler(); } catch (Exception e) { unlock(); throw new RuntimeException(e); } return; } catch (OperationTimeoutException e) { log.warn("This node is not the master Quartz and failed to wait for the lock!"); } } } catch (Exception e) { log.error("Error while trying to wait for the lock from Hazelcast!", e); } } private synchronized void unlock() { try { getLock().unlock(); } catch (IllegalStateException e) { log.warn("Exception while trying to unlock quartz lock: Hazelcast instance is already inactive!"); } catch (Exception e) { log.warn("Exception during the unlock of the master Quartz!", e); } } }
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╕рдордп-рд╕рдордп рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдЬреИрд╕рд╛ рдХрд┐ рдХреИрдорд▓ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдФрд░ рд╡рд┐рддрд░рд┐рдд рд░рдирдЯрд╛рдЗрдо рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
<route id="quartz-route"> <from uri="quartz://quartz-test/test?cron=*+*+*+*+*+?"/> <log message="Quartz each second message caught ${in.body.class}!"/> <to uri="direct:queue:done-quartz"/> </route>
рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди
рд╕рд░рд▓ рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рдХрдо рдХреА рдЧрд┐рдирддреА), рд╣рдореЗрдВ рдЕрдХреНрд╕рд░ рдЖрд╡рдХ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдЧреНрд░реАрдЧреЗрдЯрд░реНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрд╢рд╛ рдПрдХ рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрдиреЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИрдВред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реАрдХреНрд╖рдг рдХреА рдХреБрдЫ рдЕрд╡рд╕реНрдерд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, TestPassedStateред рдЬрдм рд╣рдо рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП TestFailed рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ TestFailedState рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЬрдм рд╣рдореЗрдВ TestPassedState рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ TestPassed рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдирдВрдд рддрдХред рдЗрди рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреБрдЫ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╕рдВрдХреНрд░рдордг рд╣реЛрддрд╛ рд╣реИ TestPassed -> TestFailed, рд╕рднреА рдЗрдЪреНрдЫреБрдХ рдкрд╛рд░реНрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдЙрд▓реНрдЯрд╛ рд╕рдВрдХреНрд░рдордг рд╣реИ, рддреЛ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЙрдиреНрд╣реЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХрддреНрд░реАрдХрд░рдг рд░рдгрдиреАрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪреЗ рдХрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рдореЙрдбрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдЧреНрд░реАрдЧреЗрдЯрд░реНрд╕ рдХреЗ рдЗрдирдкреБрдЯ рдкрд░ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдореВрд╣ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдХрд╛ рдЕрдкрдирд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИред рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо xsd- рд╕реНрдХреАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ xjc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреНрд░рдордмрджреНрдз рдФрд░ xml рдФрд░ jaxb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП json рдореЗрдВ deserialized рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реЗрдЬрд╝реЗрд▓рдХрд╛рд╕реНрдЯ рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ xsd рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рдПрдХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдЬрд┐рд╕рдиреЗ рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ред рдФрд░ рдореИрдВ рдпрд╣ рднреА рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпреЗ рдкрд░рд┐рд╡рд░реНрддрди рдШреЛрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╣реЛ, рдФрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдирд╣реАрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рд╕рдорд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╣реИред рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдПрдХ рд╣рд▓реНрдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЕрдкрдиреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдЕрдкрдиреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдФрд░ рдХреИрдорд▓ рдХреЗ рдорд╛рд░реНрдЧ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдиреАрдВрд╡ рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдПрдХ рдЫреЛрдЯреА рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛ рд╣рдорд╛рд░реА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИ, рдпрддреЛрдорддрд╛ рдХрд╣рд▓рд╛рддреА рд╣реИ (рдлрд┐рд░ рднреА рдПрдХ рдФрд░ рдЕрдиреБрдЧреЛрдорддрд╛ рд╢рдмреНрдж рд╕реЗ) рдФрд░ рдЬреАрдереВрдм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред
рдПрдлрдПрд╕рдПрдо рдореЙрдбрд▓ рдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрджрд░реНрдн рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдВрджреЗрд╢ рднреА рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдпреЛрдВ рдФрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЛ рдПрдХ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЧ рдХреЛ @FSM рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ (рд╢реБрд░реВ) рдФрд░ рд╕рдВрдХреНрд░рдордг рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдПрдХрддреНрд░реАрдХрд░рдг (рд╕реНрдЯреЙрдк = рдЯреНрд░реВ) рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдорд╛рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд┐рдд рд░рд╛рдЬреНрдп рдХреЛ рдЖрдЧреЗ рднреЗрдЬрддреЗ рд╣реИрдВред
рд╕рдВрдХреНрд░рдордгреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ @ рдЯреНрд░рд╛рдиреНрд╕рдирдореЗрдВрдЯ рдПрдиреЛрдЯреЗрд╢рди рдФрд░ @ рдЯреНрд░рд╛рдиреНрд╕рд┐рдЯ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдПрдХ рд╕рд░рдгреА рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдЖрдк рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдпреЛрдВ (рд╕реЗ), рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ () рд╕реЗ, рдЙрди рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рд╕рдВрдХреНрд░рдордг рд╕рдХреНрд░рд┐рдп (рдЪрд╛рд▓реВ) рд╣реИ, рдФрд░ рдпрд╣ рднреА рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд░рд╛рдЬреНрдп рд╣реИ рдорд╢реАрди рдХреЗ рдЕрдВрдд (рдмрдВрдж)ред рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП, рдПрдиреЛрдЯреЗрд╢рди @OnTransit , @BeforeTransit , рдФрд░ @AfterTransit рднреА рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ , рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдХреНрд▓рд╛рд╕ рдХреЗ рдЕрдВрджрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдПрдХ рдорд┐рд▓рд╛рди рд╕рдВрдХреНрд░рдордг рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
@FSM(start = Undefined.class) @Transitions({ @Transit(on = TestPassed.class, to = TestPassedState.class), @Transit(on = TestFailed.class, to = TestFailedState.class), @Transit(stop = true, on = TestExpired.class), }) public class TestStateFSM { @OnTransit public void onTestFailed(State oldState, TestFailedState newState, TestFailed event){} @OnTransit public void onTestPassed(State oldState, TestPassedState newState, TestPassed event){} }
рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
Yatomata<TestStateFSM> fsm = new FSMBuilder(TestStateFSM.class).build(); fsm.getCurrentState(); // returns instance of Undefined fsm.isStopped(); // returns false fsm.getFSM(); // returns instance of TestStateFSM fsm.fire(new TestPassed()); // returns instance of TestPassedState fsm.fire(new TestFailed()); // returns instance of TestFailedState fsm.fire(new TestExpired()); // returns instance of TestFailedState fsm.isStopped(); // returns true
рдПрдЧреНрд░реАрдЧреЗрд╢рдирд╕реНрдЯреНрд░реЗрдЧреЗрдЯреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдХреЗ, рд╣рдордиреЗ FSMAggregationStrategy рдмрдирд╛рдпрд╛, рдЬреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
<bean id="runnableAggregator" class="com.my.FSMAggregationStrategy"> <constructor-arg value="com.my.TestStateFSM"/> </bean>
рдЗрд╕ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХрддреНрд░реАрдХрд░рдг рд░рдгрдиреАрддрд┐ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
public class FSMAggregationStrategy<T> implements AggregationStrategy { private final Yatomata<T> fsmEngine; public FSMAggregationStrategy(Class fsmClass) { this.fsmEngine = new FSMBuilder(fsmClass).build(); } @Override public Exchange aggregate(Exchange state, Exchange message) { Object result = state == null ? null : state.getIn().getBody(); try { Object event = message.getIn().getBody(); Object fsm = fsmEngine.getFSM(); result = fsmEngine.fire(event); } catch (Exception e) { logger.error(fsm + " error", e); } if (result != null) { message.getIn().setBody(result); } return message; } public boolean isCompleted() { return fsmEngine.isCompleted(); } }
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрди рддрдХрдиреАрдХреЛрдВ рдиреЗ рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдЕрдкрд╛рдЪреЗ рдХреИрдорд▓ рдиреЗ рдЕрдкрдирд╛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкрдХреНрд╖ рджрд┐рдЦрд╛рдпрд╛ рдФрд░ рдЕрдкрдиреА рдЙрдореНрдореАрджреЛрдВ рдкрд░ рдЦрд░рд╛ рдЙрддрд░рд╛ред рдШреЛрд╖рдгрд╛рддреНрдордХрддрд╛ рдХреЛ рдЙрдЪреНрдЪ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдорд░реНрдерди рдФрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЙрддреНрдХреГрд╖реНрдЯ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред