RabbitMQ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ 1 - рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб



RabbitMQ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ AMQP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред RabbitMQ SOA (рд╕реЗрд╡рд╛-рдЙрдиреНрдореБрдЦ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛) рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЖрд╕реНрдердЧрд┐рдд рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рд╣реИред

рдХрдЯреМрддреА рдХреЗ рддрд╣рдд, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдЫрд╣ рдкрд╛рдареЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рджред рдЙрджрд╛рд╣рд░рдг рдЕрдЬрдЧрд░ рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдирдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд╛рдИрдкреА рдкрд░ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред [рдЕрдиреБрд╡рд╛рджрдХ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рдореБрдЭреЗ]


рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


RabbitMQ рдПрдХ рдореИрд╕реЗрдЬ рдмреНрд░реЛрдХрд░ рд╣реИред рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рджреЗрдирд╛ рд╣реИред рдЗрд╕реЗ рдПрдХ рдкреЛрд╕реНрдЯ рдСрдлрд┐рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ: рдЬрдм рдЖрдк рдПрдХ рдмреЙрдХреНрд╕ рдореЗрдВ рдПрдХ рдкрддреНрд░ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдбрд╛рдХрд┐рдпрд╛ рдЗрд╕реЗ рдкрддреЗ рдкрд░ рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ [рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд▓реЗрдЦрдХ рдиреЗ рд░реВрд╕реА рдкреЛрд╕реНрдЯ рд╕реЗ рдХрднреА рдирд╣реАрдВ рдирд┐рдкрдЯрд╛ рд╣реИ] ред рдЗрд╕ рд╕рд╛рджреГрд╢реНрдп рдореЗрдВ, RabbitMQ рдПрдХ рдореЗрд▓рдмреЙрдХреНрд╕, рдПрдХ рдбрд╛рдХрдШрд░ рдФрд░ рдПрдХ рдбрд╛рдХрд┐рдпрд╛ рджреЛрдиреЛрдВ рд╣реИред

RabbitMQ рдФрд░ рдкреЛрд╕реНрдЯ рдСрдлрд┐рд╕ рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдЧрдЬ рдХреЗ рд▓рд┐рдлрд╛рдлреЗ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - RabbitMQ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдбреЗрдЯрд╛ - рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рднреЗрдЬрддрд╛ рд╣реИред

RabbitMQ рдореЗрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛, рдЧреНрд░рд╛рд╣рдХ рдФрд░ рджрд▓рд╛рд▓ рдХреЛ рдПрдХ рд╣реА рднреМрддрд┐рдХ рдорд╢реАрди рдкрд░ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВред

рдирдорд╕реНрддреЗ рд╡рд┐рд╢реНрд╡!


рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдЪрд▓реЛ рдмрд╕ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ, рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛, рджреВрд╕рд░рд╛ рд╕реНрдХреНрд░реАрди рдкрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:



рдкреНрд░рджрд╛рддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдирд╛рдо рд╣реИрд▓реЛ рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдЗрд╕ рдХрддрд╛рд░ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

RabbitMQ рд▓рд╛рдЗрдмреНрд░реЗрд░реА

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


рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдкрд┐рдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдкрд╛рдЗрдк рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

$ sudo pip install pika==0.9.5 

рдпрджрд┐ рдкрд╛рдЗрдк рдпрд╛ рдЧрд┐рдЯ-рдХреЛрд░ рдЧрд╛рдпрдм рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:


рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛




рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ send.py рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдореЗрдВ рднреЗрдЬ рджреЗрдЧрд╛ред

 #!/usr/bin/env python import pika connection = pika.BlockingConnection(pika.ConnectionParameters( 'localhost')) channel = connection.channel() 

рд╣рдо рд╕реНрдерд╛рдиреАрдп рд╣реЛрд╕реНрдЯ рдкрд░ рд╕реНрдерд┐рдд рдПрдХ рд╕рдВрджреЗрд╢ рдмреНрд░реЛрдХрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВред рдХрд┐рд╕реА рдЕрдиреНрдп рдорд╢реАрди рдкрд░ рд╕реНрдерд┐рдд рдмреНрд░реЛрдХрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдорд╢реАрди рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдХреЗ рд╕рд╛рде "рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ" рдХреЛ рдмрджрд▓рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрддрд╛рд░ рдореМрдЬреВрдж рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рд╕рдВрджреЗрд╢ рдХреЛ рдХрд┐рд╕реА рдЧреИрд░-рдкрдВрдХреНрддрд┐рдмрджреНрдз рдХрддрд╛рд░ рдореЗрдВ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ RabbitMQ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрдЧрд╛ред рдЖрдЗрдП рдПрдХ рдХрддрд╛рд░ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕реЗ "рд╣реИрд▓реЛ" рдХрд╣реЗрдВ:

 channel.queue_declare(queue='hello') 

рдЕрдм рдЖрдк рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рд╕рдВрджреЗрд╢ рдореЗрдВ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб!" рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреА рдФрд░ рдЗрд╕реЗ "рд╣реИрд▓реЛ" рдирд╛рдо рдХреЗ рд╕рд╛рде рдХрддрд╛рд░ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, RabbitMQ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рд╕реАрдзреЗ рдХрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдирд┐рдордп ( рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рддреАрд╕рд░реЗ рдкрд╛рда рдореЗрдВ рд╡рд┐рдирд┐рдордп рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред рдЕрдм рдпрд╣ рдЬрд╛рдирдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдирд┐рдордп рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмрд┐рдВрджреБ рд╣реИ - рдпрд╣ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рдХрд┐рд╕ рдХрддрд╛рд░ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реВрдЯрд┐рдВрдЧ_рдХреА рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдХрддрд╛рд░ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print " [x] Sent 'Hello World!'" 

рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдмрдлрд░ рд╕рд╛рдл рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рдВрджреЗрд╢ RabbitMQ рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдмреНрд░реЛрдХрд░ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

 connection.close() 

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




рд╣рдорд╛рд░рд╛ рджреВрд╕рд░рд╛ рд░реАрдПрдореНрдлрд╝реНрд▓реЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрддрд╛рд░ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред

рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рддрд░рд╣, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ RabbitMQ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рд╣реА рдХреЛрдб рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВред рдЕрдЧрд▓рд╛ рдЪрд░рдг, рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХрддрд╛рд░ рдореМрдЬреВрдж рд╣реИред рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрдж рд╣реИ, рддреЛ рдХреЛрдИ рднреА рдкрдВрдХреНрддрд┐ рдХрд┐рддрдиреА рдмрд╛рд░ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА, рдЗрд╕ рдкрд░ рдХреЛрдИ рднреА рдкрдВрдХреНрддрд┐ рдирд╣реАрдВ рдмрдиреЗрдЧреА , рддреЛ рдХрддрд╛рд░_declare рдХрдорд╛рдВрдб рдирдИ рдХрддрд╛рд░ рдирд╣реАрдВ рдмрдирд╛рдПрдЧреАред

 channel.queue_declare(queue='hello') 

рдЖрдк рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрддрд╛рд░ рдХреА рдлрд┐рд░ рд╕реЗ рдШреЛрд╖рдгрд╛ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЗрд╕рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХрддрд╛рд░ рдореМрдЬреВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣реЛрдЧрд╛ рдпрджрд┐ Send.py рдкрд╣рд▓реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд╣рд▓реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдХрддрд╛рд░ рд▓рдЧрд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдХрддрд╛рд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА

рдпрджрд┐ рдЖрдк рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ RabbitMQ рдореЗрдВ рдХреНрдпрд╛ рдХрддрд╛рд░реЗрдВ рдореМрдЬреВрдж рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЦрд░рдЧреЛрд╢рдордХреНрдХрд▓ рдХрдорд╛рдВрдб ( рд╕реБрдкрд░рд╕реБрдЕрд░ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА) рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 $ sudo rabbitmqctl list_queues Listing queues ... hello 0 ...done. 

(рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП - sudo рдХреЗ рдмрд┐рдирд╛)

[рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд┐рдЧрд░рд╛рдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ:]

 watch 'sudo /usr/sbin/rabbitmqctl list_queues name messages_unacknowledged messages_ready messages durable auto_delete consumers | grep -v "\.\.\." | sort | column -t;' 

[рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрддрд╛рд░ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╣рд░ 2 рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рддреА рд╣реИ: рдХрддрд╛рд░ рдХрд╛ рдирд╛рдо; рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛; рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛; рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛; рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдХреА рд╕реНрдерд┐рд░рддрд╛; рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдХрддрд╛рд░ рд╣реИ; рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛]

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

 def callback(ch, method, properties, body): print " [x] Received %r" % (body,) 

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ "рд╣реИрд▓реЛ" рдирд╛рдо рдХреЗ рд╕рд╛рде рдХрддрд╛рд░ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред

 channel.basic_consume(callback, queue='hello', no_ack=True) 

рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдХрддрд╛рд░ рдХреА рд╣рдо рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ рд╣реИред рд╣рдордиреЗ рдпрд╣ рдкрд╣рд▓реЗ рдХрддрд╛рд░_рдбреЗрдХрд▓реЗрдпрд░ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдерд╛ред

No_ack рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдмрд╛рдж рдореЗрдВ [ рджреВрд╕рд░реЗ рдкрд╛рда рдореЗрдВ ] рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдЕрдВрддрд╣реАрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬреЛ рдХрддрд╛рд░ рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

 print ' [*] Waiting for messages. To exit press CTRL+C' channel.start_consuming() 


рдЦреИрд░, рдЕрдм рд╕рдм рд╕рд╛рде рд╣реИрдВ


рдкреВрд░реНрдг рдкреНрд░реЗрд╖рд┐рдд рдХреЛрдб:

 #!/usr/bin/env python import pika connection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost')) channel = connection.channel() channel.queue_declare(queue='hello') channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print " [x] Sent 'Hello World!'" connection.close() 

рдкреВрд░реНрдг рд░рд╕реАрдж рдХреЛрдб:

 #!/usr/bin/env python import pika connection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost')) channel = connection.channel() channel.queue_declare(queue='hello') print ' [*] Waiting for messages. To exit press CTRL+C' def callback(ch, method, properties, body): print " [x] Received %r" % (body,) channel.basic_consume(callback, queue='hello', no_ack=True) channel.start_consuming() 

рдЕрдм рд╣рдо рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Send.py рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ:

 $ python send.py [x] Sent 'Hello World!' 

рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 $ python receive.py [*] Waiting for messages. To exit press CTRL+C [x] Received 'Hello World!' 

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

рд╣рдордиреЗ рдирд╛рдорд╛рдВрдХрд┐рдд рдХрддрд╛рд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕реАрдЦрд╛ред рдЕрдЧрд▓реЗ рдкрд╛рда рдореЗрдВ, рд╣рдо рдПрдХ рд╕рд░рд▓ [рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди] рдХрд╛рд░реНрдп рдХрддрд╛рд░ рдмрдирд╛рдПрдВрдЧреЗред

UPD: RabbitMQ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ PL рдХреЗ рд▓рд┐рдП рдЖрдк рдпрд╣рд╛рдБ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles