RabbitMQ STOMP是否有办法停止使用消息,直到先前的消息得到确认?

x8diyxa7  于 2022-11-23  发布在  RabbitMQ
关注(0)|答案(2)|浏览(199)

我在我的项目中使用RabbitMQ Web-STOMP,它对我来说非常好,但它有一个问题。当消费者订阅一个队列时,它会立即从队列中获得所有消息。在我的情况下,一个消息任务可能会花费很多时间,只有当上一个消息完成时,消费者才需要从队列中获得下一个消息。
当用户订阅后开始发布时,一切都正常,但是当队列中已经有消息时,第一个订阅的用户将获得所有消息,而其他用户将保持空闲。是否有类似node-amqp queue.shift()方法的方法,仅在前一个消息被确认后才使用下一个消息?

rwqw0loc

rwqw0loc1#

(您使用的是哪个客户端?)
您问题的答案是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

uttx8gqw

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来自

相关问题