6

我在我的项目中使用 RabbitMQ Web-STOMP,它对我来说非常好,但它有一个问题。当消费者订阅队列时,它会立即从队列中获取所有消息。就我而言,消息任务可能需要很长时间,并且只有在上一条消息完成后,消费者才需要从队列中获取下一条消息。

一切正常,当消费者订阅后开始发布时,但当队列中已有消息时,第一个订阅的消费者将获得所有消息,其他人将保持免费。是否有类似 node-amqp queue.shift() 方法仅在上一条消息被确认时才使用下一条消息?

4

1 回答 1

5

(您使用的是哪个客户端?)

您的问题的答案是basic_qos,请参阅amqp 参考并搜索basic.qos

在 c# API 中,您将执行以下操作:

int prefetch = 10;

IModel channel = connection.CreateModel(); //where connection is IConnection
channel.basic_qos(0, prefetch, false);

预取大小可用于告诉rabbitmq 服务器有多少消息要发送给消费者,直到它们被确认。如果设置了 NO-ACK 选项,则忽略预取大小。

请记住,设置此值可能会对性能产生潜在影响,请看一下这个

于 2012-11-29T11:14:25.930 回答