大厂如何用RabbitMQ做消费端限流(上)

简介: 大厂如何用RabbitMQ做消费端限流(上)

1 消息过载

假设RabbitMQ服务器有上万条未处理消息,随便打开一个消费端,会造成巨量消息瞬间全部推送过来,然而我们单个客户端无法同时处理这么多数据。

还比如说单个Pro一分钟产生了几百条数据,但是单个Con一分钟可能只能处理60条,这时Pro-Con不平衡。通常Pro没办法做限制,所以Con就需要做一些限流措施,否则如果超出最大负载,可能导致Con性能下降,服务器卡顿甚至崩溃。

因此,我们需要Con限流。

2 Con限流机制

RabbitMQ提供了一种qos (服务质量保证)功能,在非自动确认消息的前提下,若一定数目的消息 (通过基于Con或者channel设置Qos的值) 未被确认前,不消费新的消息。

不能设置自动签收功能(autoAck = false)

如果消息未被确认,就不会到达Con,目的就是给Pro减压

限流设置API

basicQos

  • QoS
  • image.png
  • 请求特定设置“服务质量(quality of service)”。 这些设置强加数据的服务器将需要确认之前,为消费者发送的消息数量限制。 因此,他们提供消费者发起的流量控制的一种手段。
  • image.png
void BasicQos(uint prefetchSize, ushort prefetchCount,
        bool global);

prefetchSize: 单条消息的大小限制,Con通常设置为0,表示不做限制

prefetchCount: 一次最多能处理多少条消息

global: 是否将上面设置true应用于channel级别还是取false代表Con级别

prefetchSize和global这两项,RabbitMQ没有实现,不研究

prefetchCount在 autoAck=false 的情况下生效,即在自动应答的情况下该值无效,所以必须手工ACK。

void basicAck(Integer deliveryTag,boolean multiple)

调用该方法就会主动回送给Broker一个应答,表示这条消息我处理完了,你可以给我下一条了。参数multiple表示是否批量签收,由于我们是一次处理一条消息,所以设置为false。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 存储 XML
Kettle实现rabbitMQ的生产与消费
文章目录 一、Kettle为什么可以读取流数据? 二、rabbitMQ中启动MQTT插件并创建队列和路由键 三、Kettle实现rabbitMQ的生产与消费 Kettle是一款非常强大的ETL工具,不仅可以使用图形化界面,还可以处理各种数据,今天记录一下本人使用Kettle中MQTT组件来实现从rabbitMQ中读取流数据,并进行解析和处理。 提示:以下是本篇文章正文内容,下面案例可供参考
|
11月前
|
消息中间件 测试技术
RabbitMQ消费端并发和限流设置
RabbitMQ消费端并发和限流设置
927 0
|
消息中间件 网络架构
5、RabbitMQ教程-推送到消费都经历了什么
5、RabbitMQ教程-推送到消费都经历了什么
113 0
5、RabbitMQ教程-推送到消费都经历了什么
|
消息中间件 Java 网络安全
4、RabbitMQ教程-入门教程(推送和消费一个hello world)
4、RabbitMQ教程-入门教程(推送和消费一个hello world)
146 0
4、RabbitMQ教程-入门教程(推送和消费一个hello world)
|
消息中间件 API
10、RabbitMQ教程-消息的两种消费模式
10、RabbitMQ教程-消息的两种消费模式
504 0
|
消息中间件 网络性能优化 API
RabbitMQ 如何对消费端限流?
RabbitMQ 如何对消费端限流?
282 0
RabbitMQ 如何对消费端限流?
|
消息中间件 存储 NoSQL
RabbitMQ如何保证消息不被重复消费(幂等性问题详解)
案例讲解RabbitMQ如何保证消息不被重复消费!
998 0
RabbitMQ如何保证消息不被重复消费(幂等性问题详解)
|
消息中间件 NoSQL Java
RabbitMq实战如何保证消息幂等消费
RabbitMq实战如何保证消息幂等消费
390 0
RabbitMq实战如何保证消息幂等消费
|
消息中间件 NoSQL 算法
RabbitMQ—重复消费、数据丢失和消息顺序性
RabbitMQ—重复消费、数据丢失和消息顺序性
780 0
|
消息中间件 网络架构
面试官:RabbitMQ怎么实现消费的可靠投递
本文讲解RabbitMQ如何实现消费的可靠投递。
110 0
面试官:RabbitMQ怎么实现消费的可靠投递