【问题标题】:Is there any way for RabbitMQ STOMP to stop consuming messages until previous will ACKed?RabbitMQ STOMP 有什么方法可以停止消费消息,直到之前的消息被确认?
【发布时间】:2012-11-17 09:19:53
【问题描述】:

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

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

【问题讨论】:

    标签: rabbitmq stomp


    【解决方案1】:

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

    您的问题的答案是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

    【讨论】:

    • 我使用 RabbitMQ Web-STOMP 和浏览器 JS。我已经知道如何使用 C# 甚至 node.js 来处理这个问题,但是 STOMP 有没有 QoS?
    • 为 SUBSCRIBE 设置 prefetch:1 CONNECT 标头和 ack:client 标头对我不起作用...
    • 我的眼睛在哪里!当然,"prefetch-count": 1 header for SUBSCRIBE 就是答案,谢谢!
    猜你喜欢
    • 2017-07-31
    • 2016-11-13
    • 1970-01-01
    • 2019-02-04
    • 2020-12-27
    • 2012-01-13
    • 2017-09-23
    • 1970-01-01
    • 2018-06-10
    相关资源
    最近更新 更多