2017-08-10 151 views
1

我试图实现RabbitMQ请求响应模式。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. 客户端获取信息

唯一的问题是,在FIN FINING Received方法(执行BasicAck后) - 消费者停止收听listenToQueue(实际上,在UI管理中,我在该队列中看到0个消费者)。

这是为什么?

回答

0

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

+0

所以实际上我可以消除“BasicAck”,它会工作 – ohadinho

相关问题