RabbitMQ — это служба-агрегатор для обработки сообщений, которая поддерживает прием и передачу сообщений. Мы можем использовать его как очередь сообщений для обработки большого количества отправляемых сообщений. Например, при покупке товара, производитель (RabbitMQ) представляет собой отправителя, а мы — получателя, который получает товар. Давайте попробуем отправить сообщение "Hello World phpassn" для демонстрации.
(1) В качестве отправителя, нам нужно отправить сообщение в очередь. Помните, что хотя сообщение проходит через MQ и наше приложение, оно может храниться только в очереди. Хранение очереди ограничено памятью и диском хост-машины, но суть в том, что это просто буфер для сообщений. Многие отправители могут отправлять сообщения в одну очередь, а также несколько получателей могут получать сообщения из одной очереди.
(2) В качестве получателя, вы просто ждете сигнал для получения сообщения. Когда сообщение поступает в очередь, получатель получает входящее сообщение и обрабатывает его.
(3) Отправитель и получатель не обязательно должны находиться на одной и той же хост-машине.
(4) Ниже приведена схема, которую я нарисовал, показывающая взаимодействие между отправителем и получателем.
Убедитесь, что у вас уже установлен Composer, выполните следующую командуcomposer require php-amqplib/php-amqplib
Затем мы будем использовать наш отправитель сообщений send.php
и наш получатель сообщений receive.php
. Отправитель подключается к RabbitMQ, отправляет одно сообщение и затем завершает работу. (1) Создание объекта подключения
$this->amqp_host = $config['host'] ?: $this->amqp_host;
$this->amqp_port = $config['port'] ?: $this->amqp_port;
$this->amqp_username = $config['username'] ?: $this->amqp_username;
$this->amqp_password = $config['password'] ?: $this->amqp_password;
$this->amqp_connection = new AMQPStreamConnection($this->amqp_host, $this->amqp_port, $this->amqp_username, $this->amqp_password);
Пояснение: Мы создаем параметры, чтобы создать объект подключения к серверу, который будет отвечать за согласование версий протоколов и аутентификацию, чтобы предотвратить подделку. Это локальное подключение, по умолчанию используется localhost, но если это другая машина или если вы настроите MQ-кластер, вы можете использовать другие имена или IP-адреса.
(2) Необходимо объявить очередь для сообщений, чтобы мы могли отправлять сообщения в эту очередь.
//Получаем объект канала, идентифицированный числовым каналом, или создаем его, если он еще не существует $channel_id = null; $this->amqp_channel = $this->amqp_connection->channel($channel_id); //Объявляем очередь $this->amqp_channel->queue_declare($queue_name, $passive, $durable, $exclusive, $auto_delete, $nowait); return $this;
Пояснение: Объявление очереди является идемпотентным, то есть оно создается только в том случае, если она еще не существует. Содержимое сообщений — это строки, которые можно редактировать по своему усмотрению. Конечно, есть и другие параметры, такие как устойчивость сообщений и т.д.
(3) Потребитель, как и производитель, должен создать соединение и канал, а также объявить очередь, которую он будет потреблять (код такой же, как и выше).(4) Принимает сообщения, отправленные сервером, для их обработки. Помните, что сообщения отправляются сервером асинхронно на клиент.
$callback = function ($message) {
// Выводим содержимое сообщения
echo 'Получено ', $message->body, "\n";
};
$this->amqp_channel->basic_consume($queue_name, '', false, true, false, false, $callback);
// while для проверки, что все сообщения были обработаны
while (count($this->amqp_channel->callbacks)) {
$this->amqp_channel->wait();
// Для удобства демонстрации задержка в 2 секунды
sleep(2);
}
Запустите два файла в терминале, перейдите в каталог, содержащий эти файлы.
Сначала запустите потребителя: php receive.php
Затем запустите производителя: php send.php
Проверьте, какие очереди есть в RabbitMQ и сколько в них сообщений, используя командную строку:
rabbitmqctl.bat list_queues
Каталог с кодом: файлы send.php и receive.php находятся в одном каталоге.
Оригинальная ссылка: https://www.phpassn.com/article/99.html
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )