RabbitMQ流量控制机制分析

上传人:zou****hua 文档编号:181744395 上传时间:2023-01-16 格式:DOCX 页数:2 大小:22.39KB
收藏 版权申诉 举报 下载
RabbitMQ流量控制机制分析_第1页
第1页 / 共2页
RabbitMQ流量控制机制分析_第2页
第2页 / 共2页
资源描述:

《RabbitMQ流量控制机制分析》由会员分享,可在线阅读,更多相关《RabbitMQ流量控制机制分析(2页珍藏版)》请在装配图网上搜索。

1、RabbitMQ 流量控制机制简单分析在 RabbitMQ 中,消息可能被存储在多个不同的队列,消息越早被消费,那么消息经过的队列层次 越少,则平均每个消息处理的开销就越小。但若接收消息的速率过快,MQ来不及处理,这些消息 就可能进入很深层次的队列,大大增加平均每个消息的处理开销,进一步使得处理新消息和发送旧 消息的能力减弱,更多的消息会进入很深的队列,循环往复,整个系统的性能就会极大的降低。另 外若接收消息的速率过快还会实现某些进程的 mailbox 过大,可能会产生很严重的后果。为此, RabbitMQ设计了一套流控机制,本文从以下三个方面去阐述该流控机制是如何工作的。1. 如何开关闸门R

2、abbitMQ 使用TCP长连接进行通讯,接收数据的起点进程为rabbit_reader。首先分析它的接收loop recvloop(Deb, State = #v1connection_state = blocked)-mainloop(Deb, State); Qrecvloop(Deb, State = #v1sock = Sock, recv_len = RecvLen, buf_len = BufLen) when BufLen ok = rabbit_net:setopts(Sock, active, once), Q mainloop(Deb, State#v1pending_r

3、ecv = true);recvloop(Deb, State = #v1recv_len = RecvLen, buf = Buf, buf_len = BufLen)-Data, Rest = split_binary(case Buf ofB - B;_- list_to_binary(lists:reverse(Buf)end, RecvLen),recvloop(Deb, handle_input(State#v1.callback, Data,State#v1buf = Rest,buf_len = BufLen - RecvLen).从上面代码可以看出,rabbit_reader

4、每接收到一个包,就设置套接字属性为active, onece,若当前 连接被blocked时则不设置active,once,这个接收进程就阻塞在receive方法上。通过这种方式来实 现闸门的开关。2. 何时关闭闸门RabbitMQ 是用 erlang/OTP 开发的,一个消息从被接收到被发送给订阅者,必然要在多个进程间的 转发,从接收到被消费,一个消息所走过的所有进程自然形成一条消息链,RabbitMQ通过监控这条 链上每个节点“mailbox”中未被接收的消息数量,决定何时关闭闸门。实现机制如下所述: credit_from,B, value credit_to, pid, value c

5、redit_from,C, value credit_to,A, value credit_from,pid, value credit_to,B, value如图所示,进程A、B、C连成一条消息链,每个进程字典中有一对关于收发消息的credit值,以进 程B为例,credit_from, C , Value,表示能发多少条消息给C,每发一条消息该值减1,当为0 时,本进程阻塞住不再往下游进程发消息也不再接收上游的消息;credit_to, A , Value表示再接 收多少个消息就向上游进程发增加credit值的消息bump_credit, self(), Quantity ,在上游进程接 收到该消息后,就增加credit_from, pid值,这样上游进程就能持续发消息。但当上游发送速率 高于下游接收速率,credit值会逐渐被耗光这时进程就会被阻塞,阻塞的情况会一直传递到最上游 Rabbit_reader,这时 rabbit_reader 就关闭闸门。3. 何时开启闸门当上游进程收到来自下游进程的bump_credit消息时,若此时上游进程处于block状态则解除block 状态,开始接收更上游进程的消息,一个个的传导最终能够解除rabbit_reader的block状态。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!