【问题标题】:Cannot read all messages from RabbitMQ无法从 RabbitMQ 读取所有消息
【发布时间】:2015-04-20 09:46:00
【问题描述】:

我创建 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

【问题讨论】:

  • 有什么想法吗?它可以是什么?

标签: php rabbitmq amqp


【解决方案1】:

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

由于您只确认您期望的消息,因此您收到的第一条与您的条件不匹配的消息仍然未确认。因此,RabbitMQ 不会发送新消息。

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

【讨论】:

  • 是的,但如果我这样添加: $msg->delivery_info['channel']->basic_nack($msg->delivery_info['delivery_tag']);它仍然从队列中读取所有消息
  • It still read all messages from queue 是什么意思?
  • Оne 连接读取所有消息,没有任何消息发送给其他消费者。
  • 尝试$msg->delivery_info['channel']->basic_nack($msg->delivery_info['delivery_tag'], false, true); false 用于非多重和true 重新排队
  • 感谢您的建议,但不幸的是它没有帮助。在我的回调中,对于队列中的所有消息,我总是收到具有相同数据的相同消息。
猜你喜欢
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 2017-06-28
  • 1970-01-01
相关资源
最近更新 更多