【问题标题】:RabbitMQ Request-Response pattern - consumer stops listening to queue after processing first messageRabbitMQ 请求-响应模式 - 消费者在处理第一条消息后停止侦听队列
【发布时间】:2017-08-10 06:21:42
【问题描述】:

我正在尝试实现 RabbitMQ 请求-响应模式。

我的目标是始终有一个消费者监听队列并回复消息。

所以我设置了服务器:

var consumer = new EventingBasicConsumer(channel);

channel.BasicConsume(queue: 'listensToThisQueue',
   noAck: true,
   consumer: consumer);

consumer.Received += (model, ea) =>
{ 
   // Replying to client
   channel.BasicPublish(exchange: '',
            routingKey: routingKey,
            basicProperties: props,
            body: message);
   // Basic ack
   channel.BasicAck(deliveryTag: incomingDeliveryTag,
            multiple: false);
}

实际上一切正常:

  1. 客户端发送第一条消息
  2. 服务器接收和回复
  3. 客户端收到消息

唯一的问题是在完成Received方法之后(在执行BasicAck之后)-消费者停止监听listenToQueue(我实际上在UI管理中看到这个队列上有0个消费者)。

为什么会这样?

【问题讨论】:

    标签: rabbitmq queue


    【解决方案1】:

    发生这种情况是因为您订阅了noAck 设置为True 的队列。在这种情况下,消费者在发送第一条消息后崩溃(这就是您看到 0 个消费者的原因)。所以你必须订阅noAck设置为False的队列。

    【讨论】:

    • 所以实际上我可以消除“BasicAck”并且它会起作用
    猜你喜欢
    • 2017-07-31
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2021-06-16
    相关资源
    最近更新 更多