我有一个基本流,它允许我的模块订阅某些消息类型并发布消息。每条消息当前都有一个类型,以及相关的数据。
当模块无法接受消息时,我需要重新启动该模块并尝试在重新启动时向其发送消息。但是,每条消息可能有多个订阅者,但只有一个失败。我在实施这部分时遇到了麻烦。
我目前的想法是每条消息都有一个订阅它的模块数组,当它成功传递给一个模块时,该模块将从该数组中删除。然后核心尝试重新加载模块,当它重新加载时,核心将尝试再次传递消息。
不过,这似乎很hacky。它为每条消息添加了大量数据,如果模块停止反应,可以将消息流排队。另一个想法是白名单。每条消息都以一个名为“已发送”的空数组开头,并且任何接受该消息的模块都将添加到该列表中。然后核心重新启动并将消息重新发送到订阅该消息类型的任何模块。
有人有更好的方法来解决这个问题吗?
编辑:我应该注意到一切都是异步的。在模块空闲之前,发布到流的消息不会发送到模块,重新加载模块可能需要几秒钟。唯一的即时部分是将消息发送到模块 - 如果模块可以处理消息,则模块需要立即回复。