Skip to content

Latest commit

 

History

History
39 lines (26 loc) · 1.06 KB

qa.md

File metadata and controls

39 lines (26 loc) · 1.06 KB

QA

1.Rabbitmq 为什么会有 Flow Control?

Erlang 进程是通过消息传递来通信的,每个 Erlang 进程都有自己的 mailbox 📮。
Erlang 并没有对进程邮箱大小做限制,所以,当有大量消息持续发往某个进程时,会导致进程邮箱过大,最终内存溢出并奔溃。
Rabbitmq 生产者持续高速的发送消息,在消费者消费速度比较慢时,如果没有流控,很快就会“挤爆”进程的邮箱 📮。

2.什么是基于信用证算法的流控机制(credit-based algorithm)

上游进程 A 每发送一组消息给进程 B,将消耗一部分进程 B 的信用征值。
进程 A 只有确保自身的进程 B 的信用征值大于 0 的情况下才会将消息发送给下游,否则进程 A 将进入 Flow 状态。

下游进程 B 每接收并处理完一组消息,会反馈一部分信用征值给上游进程 A。


Connection 进程

�⇧  ⇩
⇧  ⇩
⇧  ⇩

Channel 进程

�⇧  ⇩
⇧  ⇩
⇧  ⇩

队列处理进程

�⇧  ⇩
⇧  ⇩
⇧  ⇩

消息持久化进程