php - 无法读取来自 RabbitMQ 的所有消息

标签 php rabbitmq amqp

我创建 RabbitMQ 监听器:

$connection = new AMQPConnection(
    $AMQP_config['server'],
    $AMQP_config['port'],
    $AMQP_config['user'],
    $AMQP_config['password'],
    $AMQP_config['virtual_host']
);

$channel = $connection->channel();

$channel->basic_qos(
    null,
    1,
    null
);

$channel->basic_consume(
    $AMQP_config['queue'],
    '',
    false,
    false,
    false,
    false,
    array($this, 'CallbackResponse')
);

while(count($channel->callbacks)) {
    $channel->wait();
}

$channel->close();
$connection->close();

public function CallbackResponse(AMQPMessage $msg)
{
    $response = json_decode($msg->body)->acopMessage;
    if ($response->reqMRef == $this->_request_reference) {
        $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
    }
}

我的 RabbitMQ 服务器上有 5 条消息。但我只收到一个回调,只有一个进入 CallbackResponse()。

我想检查队列中的所有消息,找到我发送的那条消息,阅读它,所以还剩下 4 条消息。

我做错了什么,为什么我只收到第一条消息?

使用这个:https://github.com/videlalvaro/php-amqplib

最佳答案

Your QoS is set to 1 .所以 RabbitMQ 一次只会发送一条消息。

因为您只确认您期望的消息,所以您收到的第一条不符合您条件的消息仍然未确认。因此,RabbitMQ 不会发送新消息。

所以不匹配的消息一定是unacked and requeued

关于php - 无法读取来自 RabbitMQ 的所有消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29744399/

相关文章:

PHP mysql_query() 的参数计数错误 - 可能的语法错误

php - 有没有办法防止覆盖PHP设置?

php - 有关php套接字的问题?

clojure - 如何在 Langohr 中容忍 RabbitMQ 重启?

Spring-AMQP 和直接回复

java - 具有 RabbitMQ 客户端身份验证异常的 QPID 代理

java - 使用 amqp 从队列中多路分解消息以在并行流中处理?

php - 使用 PHP 打印 MySQL 数据库中的元素作为相应图像的链接

java - Spring amqp消费者在网络故障后不会重新连接到队列

rabbitmq - RabbitMQ如何判断一个队列在管理工具中状态是否为Active