рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкрд╛рдпрдерди рд╕реЗ RabbitMQ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

KDPV


рдРрд╕рд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рдореЗрдЧрд╛рдлреЙрди рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдПрдХ рд╣реА рдХрд╛рд░реНрдп рдХреЛ RabbitMQ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: "рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рд░рд▓ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреИрд╕реЗ рдХрд░реЗрдВ?"


рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рд╕рдорд╛рдзрд╛рди HTTP рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, RabbitMQ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ HTTP рдПрдкреАрдЖрдИ рд╣реИред рдлрд┐рд░ рднреА, HTTP API рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рдЕрд╕рдВрднрд╡ рднреА рд╣реЛрддрд╛ рд╣реИ (рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ) рдРрд╕реЗ рд╕рдордп рдореЗрдВ, AMQP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ


рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЦреБрд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдвреВрдВрдврдирд╛, рдПрдПрдордХреНрдпреВрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ RabbitMQ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЖрд╡реЗрджрди рд▓рд┐рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде, рдЕрд░реНрдерд╛рддреН:


  • рдкреЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд
  • рдкреНрд░реВрдлрд╝ рджреЗрдирд╛ рд╕рдВрджреЗрд╢
  • рдореВрд▓ рдорд╛рд░реНрдЧ рддрддреНрд╡реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕рдВрдкрд╛рджрди

рдкрд╛рдпрдерди рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ (рдФрд░ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕реБрдВрджрд░) рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред (рдпрд╣рд╛рдВ рдХреЛрдИ рдмрд╣рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреНрдпрд╛ рдмрджрд▓реЗрдЧрд╛?)


RabbitMQ рдкрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧрд╛рдЗрдб ( рдПрдХ рдмрд╛рд░ , рджреЛ рдмрд╛рд░ ) рдХреЗ рдЕрдиреБрд╡рд╛рдж рд╣рдм рдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ; рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХрднреА-рдХрднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЖрд╡реЗрджрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрдерди рд╕реЗ рдПрдПрдордХреНрдпреВрдкреА рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЦрд░рдЧреЛрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдореВрд▓ рдореБрджреНрджреЛрдВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рдЖрд╡реЗрджрди рдЦреБрдж GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдПрдПрдордХреНрдпреВрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ рд░реИрдмрд┐рдЯрдПрдордХреНрдпреВ рд╕рдВрджреЗрд╢ рджрд▓рд╛рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


AMQP рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ рдЖрдо рдореИрд╕реЗрдЬрд┐рдВрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рд╕рдВрджреЗрд╢ рдорд╛рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджреЛ рдореБрдЦреНрдп рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдПрдХ рдХрддрд╛рд░ рдФрд░ рдПрдХ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ ред рдХрддрд╛рд░ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рдЬрдорд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдПрдХ рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рдХ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдпрд╛ рддреЛ рд╡рд╛рдВрдЫрд┐рдд рдХрддрд╛рд░ рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд┐рддрд░рдг рдирд┐рдпрдо (рдмрд╛рдЗрдВрдбрд┐рдВрдЧ) , рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рдХрд╣рд╛рдБ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рд╕реНрдХ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рдХреА рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЖрдк рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдПрдордХреНрдпреВрдкреА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред


RabbitMQ рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ AMQP рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред RabbitMQ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд╛рдпрдерди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред


рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдЖрдк рд╣рдореЗрд╢рд╛ рдирд┐рдЬреА рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реА рдкрд░реЗрд╢рд╛рдирд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддреЗред рдЬрдм рдЙрдиреНрд╣реЗрдВ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдлреИрд▓рд╛рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рдХреЛ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдФрд░ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдФрд░ рдХреНрдпрд╛ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпрд╛ рдФрд░ рдХрд╣рд╛рдВ рдмрджрд▓рдирд╛ рд╣реИ, рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╣рд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИ ... рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдЖрдк рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдмрд╛рд░ рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рд╣реЛред рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ 4 рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛:


  1. рдореЙрдбреНрдпреВрд▓ рдкреЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ
  2. рдХрддрд╛рд░ рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдШрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдореЙрдбреНрдпреВрд▓
  3. рдПрдХ рдореЙрдбреНрдпреВрд▓ рдЬрд┐рд╕реЗ RabbitMQ рдмреНрд░реЛрдХрд░ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  4. рдПрдХ рдореЙрдбреНрдпреВрд▓ рдЬрд┐рд╕рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЖрдо рд╣реИрдВ

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рд╣рдордиреЗ рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛, рдЗрд╕рдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ (рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреА рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП тАУрд╣реЗрд▓рд░ рд╕рд╣рд╛рдпрддрд╛)ред


рдЪреВрдВрдХрд┐ рдореЗрдЧрд╛рдлрд╝реЙрди рдореЗрдВ "рдЦрд░рдЧреЛрд╢реЛрдВ" рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдиреЛрдбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдиреЛрдбреНрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ rmq_common_tools.py рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ


рдкрд╛рдпрдерди рдореЗрдВ рдПрдПрдордХреНрдпреВрдкреА рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд┐рдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред


import pika 

рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, RabbitMQ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рддреАрди рдореБрдЦреНрдп рдЪрд░рдгреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛:


  1. рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
  2. рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдирд╛
  3. рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░реЗрдВ

рдкрд╣рд▓рд╛ рдФрд░ рдЕрдВрддрд┐рдо рдЪрд░рдг рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВ рдФрд░ rmq_common_tools.py рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ


рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:


 rmq_parameters = pika.URLParameters(rmq_url_connection_str) rmq_connection = pika.BlockingConnection(rmq_parameters) rmq_channel = rmq_connection.channel() 

рдкрд┐рдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЛ RabbitMQ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдХрд▓реНрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ URL рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдерд╛:


 'amqp://rabbit_user:rabbit_password@host:port/vhost' 

рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:


 rmq_connection.close() 

рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд╢рди


рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЦрд░рдЧреЛрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдСрдкрд░реЗрд╢рдиред


Rmq_publish.py рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдкреЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд╢рди рдЙрдкрдХрд░рдг


рд╕рдВрджреЗрд╢ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


 rmq_channel.basic_publish(exchange = params.exch, routing_key = params.r_key, body = text) 

рдЬрд╣рд╛рдВ:
рд╡рд┐рдирд┐рдордп - рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕ рдкрд░ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
routing_key - рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рд╢рд░реАрд░ - рд╕рдВрджреЗрд╢ рд╢рд░реАрд░


rmq_publish.py рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рджреЛ рд╕рдВрджреЗрд╢ рдЗрдирдкреБрдЯ рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:


  1. рд╕рдВрджреЗрд╢ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди (from_console) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  2. рд╕рдВрджреЗрд╢ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ (from_file)

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рджреВрд╕рд░рд╛ рдореЛрдб, рдмрдбрд╝реЗ рд╕рдВрджреЗрд╢реЛрдВ рдпрд╛ рд╕рдВрджреЗрд╢ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓рд╛, рдмрджрд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдиреНрдп рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рддреЗ рд╕рдордп рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИред


рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдореБрджреНрджрд╛ рдЕрдм рдкреНрд░рдХрд╛рд╢рди рдЬреИрд╕реА рдорд╛рдореВрд▓реА рдмрд╛рдд рдирд╣реАрдВ рд░рд╣ рдЧрдИ рд╣реИред рдЬрдм рд╕рдВрджреЗрд╢ рдкрдврд╝рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


  • рд╕рдВрджреЗрд╢ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдХрддрд╛рд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, "рд▓рдбрд╝рд╛рдИ" рд▓рд╛рдЗрди рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкрдврд╝рдирд╛, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдореБрдЦреНрдп рдЙрдкрднреЛрдХреНрддрд╛ рд╕реЗ "рдЪреБрдирддреЗ рд╣реИрдВ"ред рдпрджрд┐ рд╣рдо рд╕рдВрджреЗрд╢ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЦреЛрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╕ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ "рдЦрд░рдЧреЛрд╢" рдореЗрдВ рдХреНрдпрд╛ рд╕рдВрджреЗрд╢ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рдХрд▓реНрдк рдПрдХ рдЕрд▓рдЧ "рд▓реЙрдЧрд┐рдВрдЧ" рдХрддрд╛рд░ рдмрдирд╛рдирд╛ рд╣реИ, рдпрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ "рдЯреНрд░реИрдк рдХрддрд╛рд░" рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рд╕рдВрджреЗрд╢ рдкрдврд╝реЗрдВ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрд╕рдВрднрд╡ рд╣реИ рдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рдФрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдВрджреЗрд╢ рдкрд╛рдардХ rmq_consume.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛


рджреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╣реИрдВ:


  1. рдореМрдЬреВрджрд╛ рдХрддрд╛рд░ рд╕реЗ рд╕рдВрджреЗрд╢ рдкрдврд╝реЗрдВ
  2. рдЗрд╕ рдХрддрд╛рд░ рд╕реЗ рд╕рдВрджреЗрд╢ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордп рдХрддрд╛рд░ рдФрд░ рдорд╛рд░реНрдЧ рдмрдирд╛рдирд╛

рдПрдХ рдХрддрд╛рд░ рдФрд░ рдорд╛рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╡рд╛рд▓ рдкрд░ рдиреАрдЪреЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░реВрдлрд░реАрдбрд┐рдВрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:


 channel.basic_consume(on_message, queue=params.queue) try: channel.start_consuming() except KeyboardInterrupt: channel.stop_consuming() except Exception: channel.stop_consuming() rmq_tools.console_log(":\n", traceback.format_exc()) 

рдЬрд╣рд╛рдБ
on_message - рд╕рдВрджреЗрд╢ рд╣реИрдВрдбрд▓рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛
params.queue - рдХрддрд╛рд░ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕рд╕реЗ рдШрдЯрд╛рд╡ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛


рдореИрд╕реЗрдЬ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдореИрд╕реЗрдЬ рдбрд┐рд▓реАрд╡рд░реА рдкрд░ рдХреБрдЫ рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдореИрд╕реЗрдЬ рдбрд┐рд▓реАрд╡рд░ рд╣реЛрдиреЗ рдкрд░ (рдпрд╛ рдХрдиреНрдлрд░реНрдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдХрдиреНрдлрд░реНрдо рдирд╣реАрдВ) рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


 def on_message(channel, method_frame, header_frame, body): global all_cnt, lim if all_cnt >= lim: rmq_tools.console_log('   .') raise KeyboardInterrupt body_str = body.decode("utf-8")[:4000] rk = method_frame.routing_key rmq_params.file.write(rk + '\n') rmq_params.file.write(body_str + '\n\n') all_cnt = all_cnt + 1 if (lim != 0) and (rmq_params.file == sys.stdout): sys.stdout.write(f'[{rmq_tools.time_now()}] - {all_cnt} of {lim} messages consumed.\r') channel.basic_ack(delivery_tag=method_frame.delivery_tag) 

рдЬрд╣рд╛рдБ
all_cnt - рд╡реИрд╢реНрд╡рд┐рдХ рдХрд╛рдЙрдВрдЯрд░
lim - рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛


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


рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд░реАрдб рдореИрд╕реЗрдЬ рд▓рд┐рдЦрдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдРрд╕рд╛ рдЕрд╡рд╕рд░ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред


рдПрдХ DB рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб

рд╣рдо Oracle рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ cx_oracle рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред


рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ


 ora_adress = 'host:port/dbSID' ora_creds = 'user/pass' connection_ora = cx_Oracle.connect(ora_creds + '@' + ora_address) ora_cursor = connection_ora.cursor() 

On_message рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ


 global cnt, commit_int insert_rec = 'insert into ' + tab_name + '(routing_key, text) values (:rkey, :text)' ora_cursor.execute(insert_rec, text = body_str, rkey = rk) if cnt > commit_int : ora_cursor.execute('commit') cnt = 1 cnt = cnt + 1 

рдЬрд╣рд╛рдБ
cnt рдПрдХ рдФрд░ рдХрд╛рдЙрдВрдЯрд░ рд╣реИ
рдкреНрд░рддрд┐рдмрджреНрдз_рдЗрдВрдЯ - рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдореНрдорд┐рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж "рдХрдорд┐рдЯ" рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рд▓реЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЕрдВрддрд┐рдо рд╕рдлрд▓ рдкреНрд░рддрд┐рдмрджреНрдз рдХреЗ рдмрд╛рдж рдкрдврд╝реЗ рдЧрдП рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЦреЛрдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИред


рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдХрд╛рдо рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рдо рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдмрджреНрдз рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ


 ora_cursor.execute('commit') connection_ora.close() 

рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдореИрд╕реЗрдЬ рдкрдврд╝ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкрдврд╝реЗ рдЧрдП рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк "рдЦрд░рдЧреЛрд╢" рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдарднреВрдорд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕


рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ AMQP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рд╣рдо рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд░реВрдк рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдФрд░ рдЕрдиреНрдп RabbitMQ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред


рдореБрдЦреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдкрд░реЗрд╢рди рд╣реИрдВ:


  1. рдХрддрд╛рд░ рдпрд╛ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдмрдирд╛рдирд╛
  2. рдПрдХ рдЕрдЧреНрд░реЗрд╖рдг рдирд┐рдпрдо рдмрдирд╛рдирд╛ (рдмрд╛рдзреНрдпрдХрд╛рд░реА)
  3. рдПрдХ рдХрддрд╛рд░ рдпрд╛ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рд╣рдЯрд╛рдирд╛
  4. рдПрдХ рдЕрдЧреНрд░реЗрд╖рдг рдирд┐рдпрдо (рдмрдВрдзрди) рд╣рдЯрд╛рдирд╛
  5. рдХрддрд╛рд░ рд╕рдорд╛рд╢реЛрдзрди

рдЪреВрдВрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдкрд┐рдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рддреИрдпрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рд▓реЙрдиреНрдЪ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╡реЗ рдмрд╕ rmq_setup.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВред рдЕрдЧрд▓рд╛, рд╣рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд┐рдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВред


рдПрдХ рдХрддрд╛рд░ рдмрдирд╛рдирд╛


 rmq_channel.queue_declare(queue=params.queue, durable = params.durable) 

рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ
рдХрддрд╛рд░ - рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдХрд╛ рдирд╛рдо
рдЯрд┐рдХрд╛рдК - рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░, рдЯреНрд░реВ рдХрд╛ рдорд╛рди рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рдЬрдм рдЦрд░рдЧреЛрд╢ рд░рд┐рдмреВрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХрддрд╛рд░ рдореМрдЬреВрдж рд░рд╣реЗрдЧреАред рдпрджрд┐ рдЧрд▓рдд рд╣реИ, рддреЛ рд░рд┐рдмреВрдЯ рдкрд░ рдХрддрд╛рд░ рд╣рдЯрд╛ рджреА рдЬрд╛рдПрдЧреАред рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдЖрдорддреМрд░ рдкрд░ рдЕрд╕реНрдерд╛рдпреА рдХрддрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВред


рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ (рд╡рд┐рдирд┐рдордп) рдмрдирд╛рдирд╛


 rmq_channel.exchange_declare(exchange=params.exch, exchange_type = params.type, durable = params.durable) 

рдпрд╣рд╛рдБ рдПрдХ рдирдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ exchange_type рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ - рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдХрд╛ рдкреНрд░рдХрд╛рд░ред рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдкрдврд╝рд╛ рдЧрдпрд╛ рд╣реИ ред
рд╡рд┐рдирд┐рдордп - рдирд┐рд░реНрдорд┐рдд рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдХрд╛ рдирд╛рдо


рдПрдХ рдХрддрд╛рд░ рдпрд╛ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рд╣рдЯрд╛рдирд╛


 rmq_channel.queue_delete(queue=params.queue) rmq_channel.exchange_delete(exchange=params.exch) 

рдПрдХ рдЕрдЧреНрд░реЗрд╖рдг рдирд┐рдпрдо рдмрдирд╛рдирд╛ (рдмрд╛рдзреНрдпрдХрд╛рд░реА)


 rmq_channel.queue_bind(exchange=params.exch, queue=params.queue, routing_key=params.r_key) 

рд╡рд┐рдирд┐рдордп - рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕рд╕реЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдХрддрд╛рд░ - рдХрддрд╛рд░ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕реЗ рдЖрдЧреЗ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рд╣реИ
рд░реВрдЯрд┐рдВрдЧ_рдХреА - рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдХрд╛ рдореБрдЦреМрдЯрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдЧреНрд░реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдорд╛рдиреНрдп рд╣реИрдВ:


  • rk.my_keyред * - рдЗрд╕ рдорд╛рд╕реНрдХ рдореЗрдВ, рдПрдХ рддрд╛рд░рд╛рдВрдХрди рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рдЧреИрд░-рдЦрд╛рд▓реА рд╡рд░реНрдг рд╕реЗрдЯред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдореБрдЦреМрдЯрд╛ rk.my_key рдкреНрд░рдХрд╛рд░ рдХреА рдХрд┐рд╕реА рднреА рдХреБрдВрдЬреА рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ ред + рдХреБрдЫ рдФрд░, рд▓реЗрдХрд┐рди рдХреБрдВрдЬреА rk.my_key рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ
  • rk.my_keyред # - рдпрд╣ рдореБрдЦреМрдЯрд╛ рдкрд┐рдЫрд▓реЗ + рдХреБрдВрдЬреА rk.my_key рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрдЧрд╛

рдПрдХ рдЕрдЧреНрд░реЗрд╖рдг рдирд┐рдпрдо (рдмрдВрдзрди) рд╣рдЯрд╛рдирд╛


 rmq_channel.queue_unbind(exchange=params.exch, queue=params.queue, routing_key=params.r_key) 

рд╕рдм рдХреБрдЫ рдПрдХ рдЕрдЧреНрд░реЗрд╖рдг рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред


рдХрддрд╛рд░ рд╕рдорд╛рд╢реЛрдзрди


 rmq_channel.queue_purge(queue=params.queue) 

рдХрддрд╛рд░ - рдХрддрд╛рд░ рдХрд╛ рдирд╛рдо рд╕рд╛рдл рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП


рдкрд╛рдпрдерди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╡рд┐рдХрд▓реНрдк рдЬреАрд╡рди рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд▓реЙрдиреНрдЪ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИред рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЕрд░реНрдЧрдкрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ; рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛рдПрдБ рд╣реИрдВ ( рдПрдХ , рджреЛ , рддреАрди )ред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдЯреВрд▓ рдиреЗ рдореБрдЭреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреА (рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдлреЗрдВрдХрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рдЯреВрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд░реЛрдЬрдорд░реНрд░рд╛ рдХреА рдЬрд┐рдВрджрдЧреА рдореЗрдВ рдЖрд╡реЗрджрдиред рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреНрдпрд╛ рдХрд╛рдо рдЖрдпрд╛ред


рдЦреИрд░, рдЕрдм рд░реЛрдЬрдорд░реНрд░рд╛ рдХреА рдЬрд┐рдВрджрдЧреА рдореЗрдВ рдПрдПрдордХреНрдпреВрдкреА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдЫрд╛рдкред


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


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


рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рднреА рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЖрд╡реЗрджрди рдорд┐рд▓рд╛ред

Source: https://habr.com/ru/post/hi434510/


All Articles