【发布时间】:2026-02-06 16:50:01
【问题描述】:
我有一个监控两个子进程的主管进程;一个主进程和一个备份进程(以防主进程退出)。
如果主进程出现故障而邮箱中仍有邮件,是否有办法让备份进程接管并处理留在原始主进程邮箱中的邮件?
【问题讨论】:
-
节点还是进程?这是 Erlang 世界中的两个不同概念。
我有一个监控两个子进程的主管进程;一个主进程和一个备份进程(以防主进程退出)。
如果主进程出现故障而邮箱中仍有邮件,是否有办法让备份进程接管并处理留在原始主进程邮箱中的邮件?
【问题讨论】:
如果您指的是进程而不是节点,并且您想确保所有传入的消息都得到处理。无论是通过主进程还是备份进程,最好将传入消息直接存储在 Mnesia 表中。这样您就可以在备份过程中继续处理。
也就是说,我认为您尝试解决的问题可以由 OTP 自动处理。您永远不需要创建备份进程。如果一个崩溃了,你可以告诉主管重新生成相同的 gen_server。
【讨论】:
在这种情况下,我通常会将传入的消息推送到 ets 表中。这有一些微妙之处。进一步讨论here
【讨论】: