1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jonny-li-rabbitmq-study

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
03-最适合入门的RabbitMQ+PHP教程(三)消息队列简单使用.md 6.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 02.06.2025 18:34 9a50763

RabbitMQ — это служба-агрегатор для обработки сообщений, которая поддерживает прием и передачу сообщений. Мы можем использовать его как очередь сообщений для обработки большого количества отправляемых сообщений. Например, при покупке товара, производитель (RabbitMQ) представляет собой отправителя, а мы — получателя, который получает товар. Давайте попробуем отправить сообщение "Hello World phpassn" для демонстрации.

(1) В качестве отправителя, нам нужно отправить сообщение в очередь. Помните, что хотя сообщение проходит через MQ и наше приложение, оно может храниться только в очереди. Хранение очереди ограничено памятью и диском хост-машины, но суть в том, что это просто буфер для сообщений. Многие отправители могут отправлять сообщения в одну очередь, а также несколько получателей могут получать сообщения из одной очереди.

(2) В качестве получателя, вы просто ждете сигнал для получения сообщения. Когда сообщение поступает в очередь, получатель получает входящее сообщение и обрабатывает его.

(3) Отправитель и получатель не обязательно должны находиться на одной и той же хост-машине.

(4) Ниже приведена схема, которую я нарисовал, показывающая взаимодействие между отправителем и получателем.

  1. Убедитесь, что у вас уже установлен Composer, выполните следующую командуcomposer require php-amqplib/php-amqplib

  2. Затем мы будем использовать наш отправитель сообщений 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);
}
  1. Запустите два файла в терминале, перейдите в каталог, содержащий эти файлы. Сначала запустите потребителя: php receive.php Затем запустите производителя: php send.php

  2. Проверьте, какие очереди есть в RabbitMQ и сколько в них сообщений, используя командную строку: rabbitmqctl.bat list_queues

Каталог с кодом: файлы send.php и receive.php находятся в одном каталоге.

Оригинальная ссылка: https://www.phpassn.com/article/99.html

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/jonny-li-rabbitmq-study.git
git@api.gitlife.ru:oschina-mirror/jonny-li-rabbitmq-study.git
oschina-mirror
jonny-li-rabbitmq-study
jonny-li-rabbitmq-study
master