RabbitMQ STOMP有没有办法停止使用消息,直到之前确认?

时间:2012-11-29 10:15:35

标签: rabbitmq stomp

我在我的项目中使用RabbitMQ Web-STOMP,这对我来说非常好,但是有一个问题。当消费者订阅队列时,它立即获得队列中的所有消息。在我的情况下,消息任务可能需要很长时间,并且消费者有必要仅在先前完成时从队列中获取下一条消息。

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

1 个答案:

答案 0 :(得分:5)

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

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

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

int prefetch = 10;

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

预取大小可用于告知rabbitmq服务器在确认之前将多少消息发送给消费者。如果设置了NO-ACK选项,则忽略预取大小。

请记住设置此值可能会对性能产生影响,请查看this