一:消费端限流【流控】
1.1 什么是消费端的限流
假设一个场景,首先,Rabbitmq服务器有上万条未处理的消息,我们随便打开一个消费者客户端,就会出现:
巨大的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据!
1.2 如何做流控
RabbitMQ提供了一种Qos(服务质量控制)功能,即在非自动确认消息的前提下,如果一定数目的消息(通过基于consume或者channel设置Qos的值)未被确认前,不进行消费新的消息。【就是说消息未处理完就不ACK,就不拉后面的消息】
1.3参数解释
void BasicQos(uint prefetchSize,ushort prefetchCount,bool global)
prefetchSize:0,与报文的大小有关
prefetchCount:与数量有关--会告诉RabbitMQ不要同时给一个消费者推送多于N个消息,即一旦有N个消息还没有ACK,则该comsumer将block掉,直到有消息ack
global:true/false 是否将上面的设置应用于channel,简单点说就是限制是channel级别还是consumer级别
注意:

二:消费端-ACK与重回队列【生产上不使用重回队列】
代码测试,包名:com.bfxy.rabbitmq.api.requeue
2.1 消费端的手动分ACK和NACK两种【工作中使用收到ACK和NACK】
消费端进行消费的时候,如果由于业务异常我们可以进行日志的记录,然后进行补偿!
如果由于服务器宕机等严重问题,那我们就需要手动进行ACK保障消费端消费成功!
<
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



