我有一些关于php+RabbitMQ+MySQL的问题。
我有一个php工作人员,负责更新DB中的一条记录。现在我试着纠正
如果服务器MySQL消失了,就可以工作。
我在做什么:
我试着重新连接到数据库10次,如果我不能-需要把这个按摩返回到RabbitMQ。
对于接受消息,我使用基本确认;对于拒绝消息,我使用基本确认。
例子:

    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\u nack将此消息从队列中删除,我无法再重复此消息(
像这样尝试:https://github.com/php-amqplib/php-amqplib/blob/d2b8a292f709b79b1615bef87b1b89bde4c7c347/demo/basic_nack.php
阅读此:https://github.com/php-amqplib/php-amqplib/issues/221
但还是不行。
怎么了?也许你还有别的想法?

最佳答案

基本功能定义如下:

/**
 * 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/

10-12 12:51