美文网首页
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