В предыдущей главе мы привели пример простого использования
rabbitmq
, когда производитель отправлял одно сообщение, а потребитель его получал, то есть обрабатывался сообщение в одиночку. В этой главе мы рассмотрим публикацию и подписку вrabbitmq
. Возможно, вы сразу вспомните публикацию и подписку вredis
. В примере, который мы упомянули, мы используем систему логирования, то есть один производитель отправляет одно сообщение, которое передается нескольким потребителям. Чтобы продемонстрировать эту модель, мы создадим простую систему логирования. Она будет включать две программы: первый отправляет сообщения логирования, а второй принимает и выводит их.
###1. Важные моменты
(1) Производитель — это приложение, которое создает и отправляет сообщения.
(2) Очередь сообщений — это буфер для хранения сообщений.
(3) Потребитель — это приложение, которое принимает отправленные сообщения.
(4) Основная идея модели передачи сообщений в RabbitMQ
заключается в том, что производитель никогда не отправляет сообщения напрямую в очередь. Иногда производитель даже не знает, будет ли сообщение передано в какую-либо очередь.### 2. Использование обменников для отправки сообщений (с использованием типа fanout
)
Он может передать все полученные сообщения во все известные ему очереди.
$this->amqp_channel = $this->amqp_connection->channel();
// Создание обменника
$this->amqp_channel->exchange_declare($exchange_name, $type, $passive, $durable, $auto_delete);
return $this;
```### 3. Связывание обменника и очереди
В предыдущей главе мы привели пример, когда производитель отправлял сообщение напрямую, не зная, куда оно отправляется, а потребитель принимал сообщение, не зная, откуда оно пришло. Иногда нам нужно указать, откуда берутся сообщения, и чтобы обменяться очередями между производителем и потребителем, нам нужно указать, куда отправляются сообщения. Для этого используется обменник, который помогает в этом. Мы создаем обменник типа `fanout` и очередь, а затем указываем обменнику отправлять сообщения в указанную очередь. Это создает связь (или связывание).
```php
$this->amqp_channel = $this->amqp_connection->channel();
$this->amqp_channel->exchange_declare($exchange_name, $type, $passive, $durable, $auto_delete);
list($queue_name, ,) = $this->amqp_channel->queue_declare("", false, false, true, false);
$this->queue_name = $queue_name;
// Связывание очереди с обменником
$routing_key = ''; // ключ маршрутизации по умолчанию пустой, ключ не требуется
$this->amqp_channel->queue_bind($queue_name, $exchange_name, $routing_key);
return $this;
Таким образом, обменник будет отправлять сообщения в нашу очередь. Сумма: Несмотря на то, что подписка и публикация почти идентичны описанным в предыдущих двух главах, мы публикуем сообщения с одного анонимного обмена на определенный обмен, а также можем использовать один и тот же обмен для публикации в различные очереди для потребления. Если очереди не привязаны к обмену, сообщения могут быть потеряны.Теги и ссылки сохранены без изменений.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )