如果你想问的是如何避免 message_queue_too_long 异常导致服务端连接断开 中提到的客户端消息邮箱积压过大被 emqx 杀死问题:
你可以通过 zone.external.force_shutdown_policy = 10000|64MB
(emqx 4.x) 或 force_shutdown.max_mailbox_size = 1000
(emqx 5.x) 来更改默认的邮箱上限。
但基本的原则是不要修改他,默认值 10000 (emqx 4.x) 或 1000 (emqx 5.x) 已经足够大,一旦因为客户端进程超过这个上限而被系统杀死,意味着系统出现了瓶颈,应该首先调查问题出现的原因,增大这个参数无法解决问题。
emqx remote_console
然后在 console 内部执行 observer_cli:start().
,然后输入mq
按照邮箱长度排序。
在问题发生时将能看到某个进程的邮箱非常大,按回车或者进程序号查看进程详情,特别是 Current Stack Trace (C)。
另外,这里有一篇文章描述了如何应对单个订阅者产生的瓶颈:https://juejin.cn/post/7390957334419816500