我在使用 php + RabbitMQ + MySQL 时遇到了一些问题。
我有 php 工作人员,它更新数据库中的一条记录。现在我试图做出正确的 如果服务器 MySQL 消失,工作。
我在做什么: 我正在尝试重新连接到 DB 10 次,如果我不能 - 需要将此消息返回给 RabbitMQ。
接受消息我使用basic_ack,拒绝我使用basic_nack。
示例:
if ($can_accept_message) {
$message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']);
} else {
$message->delivery_info['channel']->basic_nack($message->delivery_info['delivery_tag']);
}
但是 basic_nack 从队列中删除了这条消息,我不能再重复了;(
正在阅读: https://github.com/php-amqplib/php-amqplib/issues/221
但还是不行。
怎么了?也许您还有其他想法?
最佳答案
看来函数 basic_nack 的定义如下:
/**
* Rejects one or several received messages
*
* @param string $delivery_tag
* @param bool $multiple
* @param bool $requeue
*/
public function basic_nack($delivery_tag, $multiple = false, $requeue = false)
可以看到,第三个参数是$requeue = false
你应该试试
else {
$message->delivery_info['channel']->basic_nack($message->delivery_info['delivery_tag'], false, true);
}
关于php - 如何使用 php 在 RabbitMQ 中检索相同的消息两次或更多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36945833/