ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 消费端限流 1. 假设rabbitmq服务器上有上万条未处理的消息,我们随便打开一个消费客户端,那么巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据;导致崩溃; 2. 一般生产端无法做控制,否则业务不能进行下去了,只能通过在消费端做限流; ## 服务质量保证 1. rabbitmq提供了一种qos(服务质量保证)功能,即在非自动确认消息的前提下,如果一定数目的消息(通过基于consume或channel设置Qos的值)未被确认前,不进行消费新的消息; 2. 在实际工作中一定将autoack设为false,通过手动的方式来ack,在一定的消息数目没有被ack之前,消息是不会被推送到消费端的; 3. void BasicQos(unit prefetchSize,ushort perfetchCount,bool global); ## BasicQos 1. prefetchSize : 0 ,消费的单条消息大小限制,0是无限制; 2. perfetchCount : 会告诉rabbitmq不要同时给一个消费者推送多于N个消息,即一旦有N个消息还没有ack,则该consumer将block掉,直到有消息ack; 3. global : true / false 是否将上面设置应用于channel,简单点说,就是上面限制是channel级别的还是consumer级别; **prefetchSize和global这两项,rabbit没有实现,暂且不研究.perfetchCount在no_ack=false的情况下生效,即在自动应答的情况下量两个值是不生效的;**