【前言】
最近又被流控问题缠住了,不懂其中原理的总会以界面上显示为flow来说事。那界面上连接、通道的flow状态的显示到底是怎么回事?显示为flow是否就是影响或阻塞生产者的消息发送了?本文来对此进行总结说明。
【flow状态】
要了解web界面上为什么会显示flow状态,首先得搞清楚flow状态的定义是怎样的,也就是说如何判断连接、通道当前是flow状态。
连接、通道(其实还包括队列)的flow状态主要由credit_flow算法决定(详细请戳《RabbitMQ——流控》)。
当连接或通道进程的信用值用完了,下游进程还未赋予更多的信用值时,在连接或通道的进程中,会在进程字典的credit_blocked字段里记录被下游的某个进程block,同时在进程字典的credit_blocked_at字段中记录block的时间。
如果进程字典中credit_blocked中有记录被下游block的进程,那么当前连接、通道的状态肯定是flow状态。
如果进程字典中credit_blocked中没有记录任何block的进程,则取credit_blocked_at字段中的值并与当前时间进行比较。
如果小于1秒