我在我的项目中使用RabbitMQ Web-STOMP,它对我来说非常好,但它有一个问题。当消费者订阅一个队列时,它会立即从队列中获得所有消息。在我的情况下,一个消息任务可能会花费很多时间,只有当上一个消息完成时,消费者才需要从队列中获得下一个消息。当用户订阅后开始发布时,一切都正常,但是当队列中已经有消息时,第一个订阅的用户将获得所有消息,而其他用户将保持空闲。是否有类似node-amqp queue.shift()方法的方法,仅在前一个消息被确认后才使用下一个消息?
rwqw0loc1#
(您使用的是哪个客户端?)您问题的答案是basic_qos,请参阅amqp reference并搜索basic.qos在C# API中,您将执行以下操作:
basic_qos
basic.qos
int prefetch = 10; IModel channel = connection.CreateModel(); //where connection is IConnection channel.basic_qos(0, prefetch, false);
预取大小可用于告诉rabbitmq服务器在收到确认消息之前要向使用者发送多少消息。如果设置了NO-ACK选项,则会忽略预取大小。请记住,设置此值可能会对性能产生潜在影响,请查看this。
uttx8gqw2#
只需在连接头上设置“prefetch-count”。下面是带有@stomp/stompjs包的nodejs的代码示例:
const headers: StompHeaders = { 'ack': 'client', 'prefetch-count': '1', }; const subscription = this.client.subscribe('queue-name',async (message)=>{ //handle message },headers);
StompHeader来自
2条答案
按热度按时间rwqw0loc1#
(您使用的是哪个客户端?)
您问题的答案是
basic_qos
,请参阅amqp reference并搜索basic.qos
在C# API中,您将执行以下操作:
预取大小可用于告诉rabbitmq服务器在收到确认消息之前要向使用者发送多少消息。如果设置了NO-ACK选项,则会忽略预取大小。
请记住,设置此值可能会对性能产生潜在影响,请查看this。
uttx8gqw2#
只需在连接头上设置“prefetch-count”。
下面是带有@stomp/stompjs包的nodejs的代码示例:
StompHeader来自