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

标签 php mysql rabbitmq

我在使用 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/blob/d2b8a292f709b79b1615bef87b1b89bde4c7c347/demo/basic_nack.php

正在阅读: 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/

相关文章:

PHP Regex 在自定义添加的 HTML 标签之间查找文本

php - 我如何将其转换为 mysqli

php - 从数据库动态加载博客文章

mysql - SQL_NO_CACHE 是否适用于整个查询,包括子查询?

RabbitMQ 使用自定义 header 来存储消息参数

php - 安全包含数据库登录变量

php - Magento 永久购物车不工作,不清除购物车项目?

mysql - 尝试使用 MySQL 避免使用预准备语句进行子查询

python - 同时从 Rabbitmq 接收日志并运行您的 flask 应用程序

java - springrabbit是否需要声明队列来发送消息