前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >rabbitmq使用basicQos控制速率

rabbitmq使用basicQos控制速率

作者头像
静心物语313
发布2021-12-06 14:01:07
1.9K0
发布2021-12-06 14:01:07
举报

默认情况下,RabbitMq收到消息后,就向消费者全部推送。但是如果rabbitmq队列里消息过多,且消息的数量超过了消费者处理能力, 就会导致客户端超负荷崩溃。此时我们可以通过 prefetchCount 限制每个消费者在收到下一个确认回执前一次可以最大接受多少条消息。即如果设置prefetchCount =1,RabbitMQ向这个消费者发送一个消息后,再这个消息的消费者对这个消息进行ack之前,RabbitMQ不会向这个消费者发送新的消息

代码语言:javascript
复制
 // 每个客户端每次最后获取N个消息
channel.basicQos(1);

订阅队列消息不控制接收速率

不使用channel.BasicQos 控制 prefetchCount 数量:

代码语言:javascript
复制
         var consumer = new EventingBasicConsumer(channel);
            consumer.Received += (ch, ea) =>
            {
                var body = ea.Body.ToArray();

                var msg = Encoding.UTF8.GetString(body);
                Console.WriteLine(msg);

                // copy or deserialise the payload
                // and process the message
                // ...
                channel.BasicAck(ea.DeliveryTag, false);

                Thread.Sleep(1000);
            };

            String consumerTag = channel.BasicConsume("mytest", false, consumer);
file
file

订阅队列消息控制接收速率

代码语言:javascript
复制
 channel.BasicQos(0, 1, true); //每次从队列里取出一条消息;

            var consumer = new EventingBasicConsumer(channel);
            consumer.Received += (ch, ea) =>
            {
                var body = ea.Body.ToArray();

                var msg = Encoding.UTF8.GetString(body);
                Console.WriteLine(msg);

                // copy or deserialise the payload
                // and process the message
                // ...
                channel.BasicAck(ea.DeliveryTag, false);

                Thread.Sleep(1000);
            };

            String consumerTag = channel.BasicConsume("mytest", false, consumer);
file
file
file
file

(Qos 相当于把 connection 只限制了一个channel;)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 订阅队列消息不控制接收速率
  • 订阅队列消息控制接收速率
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档