如何使用php在RabbitMQ中检索两次或更多相同的消息

时间:2016-04-29 19:10:22

标签: php mysql rabbitmq

我有一些关于php + RabbitMQ + MySQL的问题。

我有php工作者,更新DB中的一条记录。现在我试图纠正 服务器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/blob/d2b8a292f709b79b1615bef87b1b89bde4c7c347/demo/basic_nack.php

阅读本文: https://github.com/php-amqplib/php-amqplib/issues/221

但它仍无效。

怎么了?也许你还有其他想法吗?

1 个答案:

答案 0 :(得分:1)

似乎函数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);
}