рдЦрд░рдЧреЛрд╢рдПрдордХреНрдпреВред рднрд╛рдЧ 2. рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╕рдордЭрдирд╛

Exchange тАФ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдпрд╛ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБред рдЗрд╕рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ. Exchange рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдХрддрд╛рд░реЛрдВ рдореЗрдВ. рд╡рд╣ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдПрдХ рдХрддрд╛рд░ рдореЗрдВ рд░реВрдЯ рдХрд░рддрд╛ рд╣реИ рдмрдирд╛рдП рдЧрдП рдХрдиреЗрдХреНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ (bindings) рдЙрд╕рдХреЗ рдФрд░ рдХрддрд╛рд░ рдХреЗ рдмреАрдЪред

Exchange рдирд╣реАрдВ рд╣реИ рдПрд░реНрд▓рд╛рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛. рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдХрд╛рд░рдгреЛрдВ рд╕реЗ exchange - рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди (рдХреЛрдб рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд▓рд┐рдВрдХ рдЬрд╣рд╛рдВ рд░реВрдЯрд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рдирд┐рд╣рд┐рдд рд╣реИ) рд╣реИ рдореЗрдиреЗрд╢рд┐рдпрд╛. 1 рд╣рдЬрд╛рд░ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░реНрд╕ рдХреЗрд╡рд▓ 1MB рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдХрд░реЗрдВрдЧреЗред

рд▓реЗрдЦ-рд╕реВрдЪреА

рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд┐рдирд┐рдордп

Direct exchange - рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрддрд╛рд░реЛрдВ рдХреЛ рд╕рдВрджреЗрд╢ рдкрд╣реБрдБрдЪрд╛рдПрдБ. рд╕рдВрджреЗрд╢ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдФрд░ рдЙрди рд╕рднреА рдХрддрд╛рд░реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рди рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЗрд╕ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ. рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░рдХреЗ рдорд┐рд▓рд╛рди рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╕рдорддреБрд▓реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛.

рд╕рдВрджреЗрд╢ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЪрд┐рддреНрд░рдордп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡:

рдЦрд░рдЧреЛрд╢рдПрдордХреНрдпреВред рднрд╛рдЧ 2. рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╕рдордЭрдирд╛

╨Т rabbitmq рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░. рдпрд╣ direct exchange рдХреЛрдИ рдирд╛рдо рдирд╣реАрдВред рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ рдХреЛ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рдирд╛рдо рд╡рд╛рд▓реА рдПрдХ рдХрддрд╛рд░ рдореЗрдВ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рд╕рдВрджреЗрд╢ рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА.

рд╡рд┐рд╖рдп рд╡рд┐рдирд┐рдордп

Topic exchange - рд╕рдорд╛рди direct exchange рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдЪрдпрдирд╛рддреНрдордХ рд░реВрдЯрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреБрдВрдЬреА рджреА рдЧрдИ рд╣реИ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░. рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрдирд╛рддреЗ рд╕рдордп, рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ 0 рдпрд╛ рдЕрдзрд┐рдХ рд╢рдмреНрдж (рдЕрдХреНрд╖рд░) AZ ╨╕ az рдФрд░ рд╕рдВрдЦреНрдпрд╛рдПрдБ 0-9), рдПрдХ рдмрд┐рдВрджреБ, рд╕рд╛рде рд╣реА рдкреНрд░рддреАрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ * ╨╕ #.

  • * - рдмрд┐рд▓реНрдХреБрд▓ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ 1 рд╢рдмреНрдж
  • # - рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ 0 рдпрд╛ рдЕрдзрд┐рдХ рд╢рдмреНрдж

рд╕рдВрджреЗрд╢ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЪрд┐рддреНрд░рдордп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡:

рдЦрд░рдЧреЛрд╢рдПрдордХреНрдпреВред рднрд╛рдЧ 2. рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╕рдордЭрдирд╛

рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рд╕реЗ RabbitMQ 2.4.0 рдХреЗ рд▓рд┐рдП рд░реВрдЯрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо topic exchange рддрдХ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ 145 рдХрдИ рдЧреБрдирд╛ рддреЗрдЬ. рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреЗрд╢ рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡реГрдХреНрд╖ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреИрдЯрд░реНрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ a.b.c, a.*.b.c, a.#.c ╨╕ b.b.c рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:

рдЦрд░рдЧреЛрд╢рдПрдордХреНрдпреВред рднрд╛рдЧ 2. рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╕рдордЭрдирд╛

рдХрд┐рд╕реА рдкреИрдЯрд░реНрди рдХреЗ рдорд┐рд▓рд╛рди рдХреА рдЦреЛрдЬ рдЬрдбрд╝ рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рдХреА рдЬрд╛рддреА рд╣реИред

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

  • рдЗрд╕ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрди рд╕рдХрддрд╛ рд╣реИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк, рдХреНрдпреЛрдВрдХрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд╣рдореЗрд╢рд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рдВрджреЗрд╢ рдЙрд╕реА рддрд░рд╣ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛ direct exchange рдпрд╛ fanout exchange
  • рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ * рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗрдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ #.
  • topic exchange рдФрд░ рдзреАрдорд╛ direct exchange

рдлреИрдирдЖрдЙрдЯ рдПрдХреНрд╕рдЪреЗрдВрдЬ

Fanout exchange - рд╕рднреА рд╕рдВрджреЗрд╢ рд╕рднреА рдХрддрд╛рд░реЛрдВ рдореЗрдВ рдкрд╣реБрдВрдЪрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рднрд▓реЗ рд╣реА рд╕рдВрджреЗрд╢ рдореЗрдВ рдПрдХ рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛред

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

  • RabbitMQ рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬрд┐рдпреЛрдВ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдкрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред рдпреЗ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╣реИ exchange;
  • рд╕рднреА рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП;

рд╕рдВрджреЗрд╢ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЪрд┐рддреНрд░рдордп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡:

рдЦрд░рдЧреЛрд╢рдПрдордХреНрдпреВред рднрд╛рдЧ 2. рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╕рдордЭрдирд╛

рд╣реЗрдбрд░ рдПрдХреНрд╕рдЪреЗрдВрдЬ

Headers exchange - (рдХреБрдВрдЬреА, рдореВрд▓реНрдп) рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝реЗ рдХреА рддреБрд▓рдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдХрддрд╛рд░реЛрдВ рдореЗрдВ рд░реВрдЯ рдХрд░рддрд╛ рд╣реИ headers рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдФрд░ рд╕рдорд╛рди рд╕рдВрджреЗрд╢ рдЧреБрдгред headers рдпрд╣ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ Dictionary<╨║╨╗╤О╤З, ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡>.

рдпрджрд┐ рдЖрдк рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреБрдВрдЬреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ x-match рдЕрд░реНрде рд╕рд╣рд┐рдд any, рддреЛ рдпрджрд┐ (рдХреБрдВрдЬреА, рдорд╛рди) рдЬреЛрдбрд╝реЗ рдХрд╛ рдЖрдВрд╢рд┐рдХ рдорд┐рд▓рд╛рди рд╣реЛрддрд╛ рд╣реИ рддреЛ рд╕рдВрджреЗрд╢ рд░реВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рдорд╛рди рд╣реИ or.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреБрдВрдЬреА x-match рдореВрд▓реНрдп рд╕рдорд╛рд╣рд┐рдд рд╣реИ all. рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ (рдХреБрдВрдЬреА, рдорд╛рди) рдЬреЛрдбрд╝реЗ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ рддреЛ рд╕рдВрджреЗрд╢ рд░реВрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рдорд╛рди рд╣реИ and.

рд╕рдВрджреЗрд╢ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЪрд┐рддреНрд░рдордп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡:

рдЦрд░рдЧреЛрд╢рдПрдордХреНрдпреВред рднрд╛рдЧ 2. рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╕рдордЭрдирд╛

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

  • рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рдЪреАрд▓рд╛рдкрди
  • рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдУрд╡рд░рд╣реЗрдбред рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рднреА (рдХреБрдВрдЬреА, рдорд╛рди) рдЬреЛрдбрд╝реЗ headers рд╕рдВрджреЗрд╢ рд░реВрдЯрд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдВрдЬреА рдирд╛рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдп рд╡рд┐рдирд┐рдордп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛.

рд▓рдЧрд╛рддрд╛рд░-рд╣реИрд╢рд┐рдВрдЧ рдПрдХреНрд╕рдЪреЗрдВрдЬ

рдпрд╣ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рд╣реИ рд▓рдЧрд╛рдирд╛ ╨╕ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдирд╣реАрдВ рд╣реИ ╨▓ RabbitMQ.

Consistent-hashing exchange (рд╕реБрд╕рдВрдЧрдд рд╣реИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рдирд┐рдордп) - рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрдИ рдХрддрд╛рд░реЗрдВ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рдЖрдкрдХреЛ рдЙрдирдХреЗ рдмреАрдЪ рд▓реЛрдб рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХрддрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рд╡рдЬрди (рд╕рд╢рд░реНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рд╕реЗ) рджреНрд╡рд╛рд░рд╛ рд╣реЛрддрд╛ рд╣реИ 0 - n).

рдХрддрд╛рд░реЛрдВ рдХрд╛ рд╕рдорддреБрд▓реНрдп рднрд╛рд░ - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрддрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рд▓рдЧрднрдЧ рдЗрддрдиреА рд╣реА рд░рд╛рд╢рд┐ рд╕рдВрджреЗрд╢ (рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдХреЗрд╡рд▓ рдПрдХ рдХрддрд╛рд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛)ред рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рдорд╛рди рд╡рд┐рддрд░рдг рдХреА рдХреЛрдИ рдкреВрд░реНрдг рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ.

рд╕рдВрджреЗрд╢ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЪрд┐рддреНрд░рдордп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡:

рдЦрд░рдЧреЛрд╢рдПрдордХреНрдпреВред рднрд╛рдЧ 2. рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╕рдордЭрдирд╛

Hash рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрдгрдирд╛ рдХреА рдЧрдИ headers рд╕рдВрджреЗрд╢. рдпрджрд┐ рд╕рднреА рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╣реЛрдВ рдпрд╛ headers, рддреЛ рд╡рд┐рддрд░рдг рд╡рдЬрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реЛрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ headers.

рдЬрдм рдЙрдкрднреЛрдХреНрддрд╛ рдереНрд░реВрдкреБрдЯ рдХреЛ рдПрдХ рд╣реА рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдПрдХреНрд╕рдЪреЗрдВрдЬрд░реНрд╕ рдХрд╛ рд╕рдВрдпреЛрдЬрди (E2E)

рд╕рдВрдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдПрдХреНрд╕рдЪреЗрдВрдЬрд░реНрд╕ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд┐рдирд┐рдордп-рд╕реЗ-рд╡рд┐рдирд┐рдордп (рд╡рд┐рдирд┐рдордпрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ AMQP. рдпрд╣ рдУрд░ рд╕реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ RabbitMQ).

рд╕рдВрджреЗрд╢ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЪрд┐рддреНрд░рдордп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡:

рдЦрд░рдЧреЛрд╢рдПрдордХреНрдпреВред рднрд╛рдЧ 2. рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╕рдордЭрдирд╛

рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ E2E рд╣рдо рд╡рд░реНрддрдорд╛рди рдФрд░ рдмрдврд╝рддреА рджреЛрдиреЛрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╕реНрдХреЗрд▓реЗрдмрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХреНрд╕рдЪреЗрдВрдЬ рдмрдирд╛рдПрдВ

рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реЛрддрд╛ рд╣реИ RPC рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ. рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ Exchange.DeclareрдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛:

  • рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдХрд╛ рдирд╛рдо
  • рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдкреНрд░рдХрд╛рд░
  • рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░

рд░рдЪрдирд╛ рдЙрджрд╛рд╣рд░рдг exchange рдХреЗ рджреНрд╡рд╛рд░рд╛ RabbitMQ.рдЧреНрд░рд╛рд╣рдХ:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • exchange - рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕реЗ рд╣рдо рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдирд╛рдо рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  • type тАФ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░
  • durable - рдпрджрд┐ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ true, рддреЛ exchange рд╕реНрдерд╛рдпреА рд╣реЛрдЧрд╛. рдЗрд╕реЗ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рд░реНрд╡рд░/рдмреНрд░реЛрдХрд░ рдкреБрдирд░рд╛рд░рдВрдн рд╕реЗ рдмрдЪ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдорд╛рди false, рддреЛ exchange рдЕрд╕реНрдерд╛рдпреА рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░/рдмреНрд░реЛрдХрд░ рдХреЗ рд░реАрдмреВрдЯ рд╣реЛрдиреЗ рдкрд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
  • autoDelete - рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд╖реНрдХрд╛рд╕рдиред Exchange рдЬрдм рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реА рд╕рднреА рдХрддрд╛рд░реЗрдВ рд╣рдЯрд╛ рджреА рдЬрд╛рдПрдВрдЧреА рддреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
  • arguments - рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ. рдЕрдзрд┐рдХрддрд░, рд╡реЗ рддрд░реНрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ alternative exchange (рд╡реИрдХрд▓реНрдкрд┐рдХ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░). рдпрджрд┐ рдХреЛрдИ рд╕рдВрджреЗрд╢ рдореВрд▓ рдорд╛рд░реНрдЧ рдХреЗ рд╕рд╛рде рдпрд╛рддреНрд░рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдорд╛рд░реНрдЧ рдХреЗ рд╕рд╛рде рд░реВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЦрд░рдЧреЛрд╢рдПрдордХреНрдпреВред рднрд╛рдЧ 2. рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╕рдордЭрдирд╛

рдпрджрд┐ рд╕реГрдЬрди exchange рд╢рд╛рдпрдж, рддреЛ рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рднреЗрдЬреЗрдЧрд╛ RPC рдЬрд╡рд╛рдм Exchange.DeclareOk. рдпрджрд┐ рд╕реГрдЬрди рдЕрд╕рдВрднрд╡ рд╣реИ (рдЕрдиреБрд░реЛрдз рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ Exchange.Declare), рдлрд┐рд░ рдЪреИрдирд▓ рдмрдВрдж рд╣реЛ рдЬрд╛рдпреЗрдЧрд╛ рд╕рд░реНрд╡рд░ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ Channel.Close рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдСрдкрд░реЗрд╢рдирдЗрдВрдЯрд░рдкреНрдЯреЗрдбрдПрдХреНрд╕реЗрдкреНрд╢рди, рдЬрд┐рд╕рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдФрд░ рдЙрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрдЧрд╛ред

рд╕рдВрджреЗрд╢ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЧреИрд░-рдореМрдЬреВрдж рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдХреЛ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - RabbitMQ рдЪреБрдкрдЪрд╛рдк рд╣рдЯрд╛ рджреЗрдВрдЧреЗ.

GUI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдмрдирд╛рдирд╛

рдПрдбрдорд┐рди рдкреИрдирд▓ рдкрд░ рдЬрд╛рдПрдВ RabbitMQ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрддрд░реНрдЧрдд guest (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо: guest рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб: guest). рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ guest рдХреЗрд╡рд▓ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рд╕реЗ рд╣реА рдХрдиреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдм рдЯреИрдм рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ Exchanges рдФрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ Add a new exchange. рдЧреБрдг рднрд░реЗрдВ:

рдЦрд░рдЧреЛрд╢рдПрдордХреНрдпреВред рднрд╛рдЧ 2. рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╕рдордЭрдирд╛

рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдКрдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рд╣рдо рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ Internal, рддреЛ рд╡рд┐рдирд┐рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ E2E. Producer рдРрд╕реЗ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЛ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рднреЗрдЬ рдкрд╛рдПрдВрдЧреЗред

рдирд┐рд╖реНрдХрд░реНрд╖

рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЯреЛрдкреЛрд▓реЙрдЬреА рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ рдорд╛рд░реНрдЧ рдПрдХ рдЧреНрд░рд╛рдлрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдПрдХ рдЧреНрд░рд╛рдлрд╝ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдпрд╣ рдЙрдЪреНрдЪ рдЯреНрд░реИрдлрд╝рд┐рдХ рд╡рд╛рд▓реЗ рдкрдереЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣реА рд╣реИрдВ рдЬреЛ рдорд╛рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЙрдЪреНрдЪрддрд░ рдереНрд░реВрдкреБрдЯ (рдкреНрд░рджрд░реНрд╢рди)ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░реЗрдВред

рдпрджрд┐ рдирд┐рд░реНрдорд┐рдд рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рд╣реИ рдкрд░рд┐рдорд┐рдд рд╕реЗрдЯ рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬрд┐рдпрд╛рдБ, рддреЛ рдпрд╣ рдХрдИ рдХреА рдУрд░ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИ fanout exchange, рдЬреЛ рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд 1:1 рд╣реИрдВред рд╣рдореЗрдВ рд╡рд╣ рдпрд╛рдж рд╣реИ fanout exchange рд╕рдмрд╕реЗ рддреЗрдЬред

рдпрджрд┐ рдорд╛рд░реНрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдирдиреНрдд рдХреА рдУрд░ рдкреНрд░рд╡реГрддреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП topic exchange рдпрд╛, рдпрджрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ direct exchnge, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рддреЗрдЬрд╝ рд╣реИ topic exchange.

рд╡рд┐рднрд┐рдиреНрди рдХреЗ рд╕рдВрдпреЛрдЬрди exchange рдЖрдкрдХреЛ рд╕рд╣реА рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рд╕реНрдХреЗрд▓реЗрдмрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдФрд░ рдмрдврд╝рддреА рджреЛрдиреЛрдВ рд╕рд┐рд╕реНрдЯрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

рд╕рдВрдЦреНрдпрд╛ exchange рдФрд░ рдорд╛рд░реНрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрддрд╛рд░реЗрдВ рдиреНрдпреВрдирддрдо рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╣рдо Queues рдФрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧреНрд╕ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдордЭрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред

рд╕рдВрджрд░реНрднреЛрдВ

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ