美文网首页
RabbitMQ的QoS流控

RabbitMQ的QoS流控

作者: 杰森斯坦sen | 来源:发表于2018-04-24 17:56 被阅读0次

    RabbitMQ可以设置basicQoS(Consumer Prefetch)来对consumer进行流控,从而限制未ack的消息数量。

    示例

    每个consumer单独流控

    channel.basicQos(10); // Per consumer limit
    channel.basicConsume("my-queue1", false, consumer1);
    channel.basicConsume("my-queue2", false, consumer2);
    

    多个consumer共享流控

    channel.basicQos(10, false); // Per consumer limit
    channel.basicQos(15, true);  // Per channel limit
    channel.basicConsume("my-queue1", false, consumer1);
    channel.basicConsume("my-queue2", false, consumer2);
    

    分析

    官方Java客户端提供了DefaultConsumer和QueueingConsumer。 其中QueueingConsumer内部维护了一个阻塞队列BlockingQueue,此队列就是用来缓存从queue获取的message。

    private final BlockingQueue<QueueingConsumer.Delivery> _queue;
    

    Spring amqp提供了类似的BlockingQueueConsumer,但是默认的prefetchCount是1。

    链接

    Consumer Prefetch
    Some queuing theory: throughput, latency and bandwidth

    相关文章

      网友评论

          本文标题:RabbitMQ的QoS流控

          本文链接:https://www.haomeiwen.com/subject/apwjlftx.html