RabbitMQ请求 - 响应模式 - 消费者在处理第一条消息后停止侦听队列

时间:2017-08-10 06:21:42

标签: rabbitmq queue

我试图实现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. 客户端收到消息
  4. 唯一的问题是在finshing Received方法之后(执行BasicAck之后) - 消费者停止监听listenToQueue(实际上我在UI管理中看到此队列上有0个消费者)。

    为什么?

1 个答案:

答案 0 :(得分:0)

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