Работа с очередями RabbitMQ на php

12.04.2019

Первое знакомство с RabbitMQ

Общие мысли:

Нужно учитывать, что для обработки/получения сообщений php скрипт должен бесконечно работать в цикле.

Установка:

 
yum -y install epel-release 
yum -y install erlang 
yum -y install rabbitmq-server
firewall-cmd --zone=public --permanent --add-port=4369/tcp --add-port=25672/tcp --add-port=5671-5672/tcp --add-port=15672/tcp  --add-port=61613-61614/tcp --add-port=1883/tcp --add-port=8883/tcp
firewall-cmd --reload
systemctl start rabbitmq-server.service
systemctl enable rabbitmq-server.service
rabbitmq-plugins enable rabbitmq_management
chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/
rabbitmqctl add_user mqadmin mqadminpassword
rabbitmqctl set_user_tags mqadmin administrator
rabbitmqctl set_permissions -p / mqadmin ".*" ".*" ".*"
systemctl restart rabbitmq-server.service

После этого можно попасть в веб морду: http://192.168.XXX.XXX:15672/#/

Для работы php:

 
yum -y install php71w-bcmath 
composer require php-amqplib/php-amqplib

Отправка сообщений:

01_send.php (Download)

 <?php

  error_reporting(E_ALL);
  ini_set('display_errors', 'On');

  require_once __DIR__ . '/vendor/autoload.php';
  use PhpAmqpLib\Connection\AMQPStreamConnection;
  use PhpAmqpLib\Message\AMQPMessage;


  $connection = new AMQPStreamConnection('192.168.XXX.XXX', 5672, 'guest', 'guest');
  $channel = $connection->channel();

  $channel->queue_declare('queue1', false, false, false, false);

  
  $msg = new AMQPMessage('Hello World!'.rand(1, 1000));
  $channel->basic_publish($msg, '', 'queue1');

  echo ' [x] Sent '.$msg->body."\n<br />";

  $channel->close();
  $connection->close();

Получение сообщений:

02_receive.php (Download)

 <?php

  error_reporting(E_ALL);
  ini_set('display_errors', 'On');

  require_once __DIR__ . '/vendor/autoload.php';
  use PhpAmqpLib\Connection\AMQPStreamConnection;
  
  
  $connection = new AMQPStreamConnection('192.168.XXX.XXX', 5672, 'guest', 'guest');
  $channel = $connection->channel();

  $channel->queue_declare('queue1', false, false, false, false);

  echo " [*] Waiting for messages. To exit press CTRL+C\n";  
  
  $callback = function ($msg)
  {
    echo ' [x] Received ', $msg->body, "\n";
  };

  $channel->basic_consume('queue1', '', false, true, false, false, $callback);

  while (count($channel->callbacks))
  {
    $channel->wait();
  }


Категории: PHP, Linux, Centos
Пометки: Установка и настройка RabbitMQ на CentOS 7
Яндекс.Метрика