Первое знакомство с RabbitMQ
Работа с очередями RabbitMQ на php
12.04.2019
Общие мысли:
Нужно учитывать, что для обработки/получения сообщений 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(); }