我试图实现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);
}
一切都很好:
唯一的问题是在finshing Received
方法之后(执行BasicAck
之后) - 消费者停止监听listenToQueue
(实际上我在UI管理中看到此队列上有0个消费者)。
为什么?
答案 0 :(得分:0)
这种情况正在发生,因为您订阅了noAck
设置为True
的队列。在这种情况下,消费者在传递第一条消息后崩溃(这就是为什么你会看到0个消费者)。因此,您必须订阅noAck
设置为False
的队列。