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

Let*_*III 6 stomp rabbitmq

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

所有工作正常,在订阅消费者后开始发布时,但当队列中已有消息时,首先订阅的消费者将获得所有消息,其他人将保持免费.有什么像node-amqp queue.shift()方法只有在前一个被确认时才使用下一条消息吗?

kzh*_*hen 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);
Run Code Online (Sandbox Code Playgroud)

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

记住设置这个值可以有一个潜在的性能影响,来看看这个.

  • 我的眼睛在哪里!当然,"prefetch-count":SUBSCRIBE的1个标题就是答案,谢谢! (3认同)
  • 设置预取:1个CONNECT标头和SUBSCRIBE的ack:客户端标头对我不起作用... (2认同)