Я пытаюсь выяснить, возможно ли хранить сообщения в обмене RabbitMQ, даже когда не работает ни один потребитель.
Я понял (возможно, неправильно), что для достижения этого обмен должен быть "долговечным"«а также очередь и сообщение должны быть отправлены с« постоянным »флагом
'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT
Моя главная цель - сохранить все сообщения в обмене так, чтобы в случаепричина, по которой ни один потребитель не запускается, когда я запускаю его, все сообщения в обмене могут быть направлены в связанную очередь.Я объявляю свои обмены и очереди следующим образом:
//Sender.php
public function sendToQueue(ActionMessage $message)
{
$headers = [
'content-type' => 'application/json',
'timestamp' => $message->getCreatedAt()->getTimestamp(),
'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT
];
$channel = $this->connection->getChannel();
$channel->exchange_declare($this->exchangeName, 'direct', false, true, false);
$qMessage = new AMQPMessage(json_encode($message->toArray()), $headers);
$channel->basic_publish($qMessage, $this->exchangeName, $message->getTopic());
return true;
}
//Receiver.php
public function consume($callbackFunction)
{
$channel = $this->messenger->getChannel();
$channel->exchange_declare($this->exchange, 'direct', false, true, false);
list($queueName, ,) = $channel->queue_declare('', false, true, true, false);
$channel->queue_bind($queueName, $this->exchangeName, $this->topicAction);
$channel->basic_consume($queueName, '', false, true, false, false, $callbackFunction);
while (count($channel->callbacks)) {
$channel->wait();
}
$channel->close();
$this->messenger->close();
}
Буду признателен за любую помощь (даже просто чтобы отказаться от идеи и вставить некоторое пространство между ними).Спасибо.