MonsterMQ рдкрд╛рд░реНрдЯ 2 рдХреЗ рд╕рд╛рде RabbitMQ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЫрд╡рд┐
(рд╕реЗ рд▓реА рдЧрдИ рдЪрд┐рддреНрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ RabbitMQ рд╡реЗрдмрд╕рд╛рдЗрдЯ )

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

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

рдЦрд╛рдирд╛ рдмрдирд╛рдирд╛


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

рд╣рдо рдЕрдкрдиреЗ send.php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд┐рдЫрд▓реЗ рдкрд╛рда рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдпрд╣ рдордирдорд╛рдирд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХреЗред

try {
   $producer = \MonsterMQ\Client\Producer();

   $producer->connect('127.0.0.1', 5672);
   $producer->logIn('guest', 'guest');

   $producer->queue('test-queue')->declare();

   $message = implode(' ', array_slice($argv, 1));
   $message = empty($message) ? 'Hello world!' : $message;

   $producer->publish($message, 'test-queue');

   echo "\n Sent {$message} \n";
} catch(\Exception $e) {
   var_dump($e);
}

рд╣рдорд╛рд░реА рдкреНрд░рд╛рдкреНрддред Php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рднреА рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрд╢рди рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдирд╛рдо рдкрд░ рд░рдЦреЗрдВред рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ:

try {
   $consumer = \MonsterMQ\Client\Consumer();

   $consumer->connect('127.0.0.1', 5672);
   $consumer->logIn('guest', 'guest');

   $consumer->queue('test-queue')->declare();

   $consumer->consume('test-queue');

   $consumer->wait(function ($message, $channelNumber) use ($consumer){
      echo "\n Received: {$message}";
      sleep(substr_count($message, '.'));
      echo "\n Done";
   });
} catch(\Exception $e) {
   var_dump($e);
}

рдЕрдЧрд▓рд╛, рджреЛрдиреЛрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдореЗрдВ рдЪрд▓рд╛рдПрдВ:

# Shell 1
php worker.php 

# Shell 2
php send.php "A very hard task which takes two seconds.."

рдХрд╛рд░реНрдп рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рднреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрдИ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛рдо рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдореЗрдВ рджреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛.php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ ред рдФрд░ рддреАрд╕рд░реЗ рдореЗрдВ рд╣рдо send.php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВрдЧреЗ

# Shell 1
php worker.php 

# Shell 2
php worker.php 

# Shell 3
php new_task.php First message.
php new_task.php Second message..
php new_task.php Third message...
php new_task.php Fourth message....
php new_task.php Fifth message.....

рдЕрдЧрд▓рд╛, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреНрдпрд╛ рд▓реЗрдХрд░ рдЖрдП:
# shell 1
php worker.php
# Received: First message.
# Done
# Received: Third message...
# Done
# Received: Fifth message.....
# Done

# shell 2
php worker.php
# Received: Second message..
# Done
# Received: Fourth message....
# Done

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

рд╕рдВрджреЗрд╢ рдХреА рдкреБрд╖реНрдЯрд┐


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

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

MonsterMQ рдореЗрдВ рд╕рдВрджреЗрд╢ рдкрд╛рд╡рддреА рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ()

$consumer->consume('test-queue', true);

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

sudo rabbitmqctl list_queues name messages_ready messages_unacknowledged

рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдкрд░, рд╕реВрдбреЛ рдХреЛ рдЧрд┐рд░рд╛рдПрдВ

rabbitmqctl.bat list_queues name messages_ready messages_unacknowledged

рдХрддрд╛рд░ рд╕реБрд░рдХреНрд╖рд╛


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

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

$consumer->queue('new-queue')->setDurable()->declare();

рдкреНрд░реЗрд╖рдХ рдХреЛрдб рдореЗрдВ рдХрддрд╛рд░ рдШреЛрд╖рдгрд╛ рдХреЛрдб рдХреЛ рдмрджрд▓рдирд╛ рднреА рдпрд╛рдж рд░рдЦреЗрдВред

рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдЪрд┐рдд рд╡рд┐рддрд░рдг


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

$consumer->qos()->prefetchCount(1)->perConsumer()->apply();

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

рдЫрд╡рд┐
(рдЫрд╡рд┐ RabbitMQ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рд▓реА рдЧрдИ рд╣реИ )

рдкреВрд░реЗ рдХреЛрдб рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛


рдпрд╣ рд╣рдорд╛рд░реЗ send.php (рдкреНрд░реЗрд╖рдХ) рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛

try {
   $producer = \MonsterMQ\Client\Producer();

   $producer->connect('127.0.0.1', 5672);
   $producer->logIn('guest', 'guest');

   $consumer->queue('new-queue')->setDurable()->declare();

   $message = implode(' ', array_slice($argv, 1));
   $message = empty($message) ? 'Hello world!' : $message;

   $producer->publish($message, 'test-queue');

   echo "\n Sent {$message} \n";
} catch(\Exception $e) {
   var_dump($e);
}

рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ред рдПрдлрдкреА

try {
   $consumer = \MonsterMQ\Client\Consumer();

   $consumer->connect('127.0.0.1', 5672);
   $consumer->logIn('guest', 'guest');

   $consumer->queue('new-queue')->setDurable()->declare();

   $consumer->qos()->prefetchCount(1)->perConsumer()->apply();

   $consumer->consume('test-queue');

   $consumer->wait(function ($message, $channelNumber) use ($consumer){
      echo "\n Received: {$message}";
      sleep(substr_count($message, '.'));
      echo "\n Done";
   });
} catch(\Exception $e) {
   var_dump($e);
}

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

All Articles