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