Erlang 进程是通过消息传递来通信的,每个 Erlang 进程都有自己的 mailbox 📮。
Erlang 并没有对进程邮箱大小做限制,所以,当有大量消息持续发往某个进程时,会导致进程邮箱过大,最终内存溢出并奔溃。
Rabbitmq 生产者持续高速的发送消息,在消费者消费速度比较慢时,如果没有流控,很快就会“挤爆”进程的邮箱 📮。
上游进程 A 每发送一组消息给进程 B,将消耗一部分进程 B 的信用征值。
进程 A 只有确保自身的进程 B 的信用征值大于 0 的情况下才会将消息发送给下游,否则进程 A 将进入 Flow 状态。
下游进程 B 每接收并处理完一组消息,会反馈一部分信用征值给上游进程 A。
Connection 进程
�⇧ ⇩
⇧ ⇩
⇧ ⇩
Channel 进程
�⇧ ⇩
⇧ ⇩
⇧ ⇩
队列处理进程
�⇧ ⇩
⇧ ⇩
⇧ ⇩
消息持久化进程