モジュールが特定のメッセージ タイプをサブスクライブし、メッセージを発行できるようにする基本的なストリームがあります。現在、各メッセージにはタイプと関連データがあります。
モジュールがメッセージの受け入れに失敗した場合、そのモジュールを再起動し、再起動時にメッセージを送信する必要があります。ただし、各メッセージには複数のサブスクライバーが含まれる場合がありますが、失敗するのは 1 つだけです。この部分の実装に問題があります。
私の現在の考えでは、各メッセージにはサブスクライブされたモジュールの配列があり、モジュールに正常に渡されると、モジュールはその配列から削除されます。その後、コアはモジュールのリロードを試み、リロードされると、コアはメッセージを再度渡そうとします。
ただし、これはハッキーに思えます。各メッセージに大量のデータが追加され、モジュールが反応しなくなった場合、メッセージ ストリームがキューに入る可能性があります。別の考えは、代わりにホワイトリストです..各メッセージは「送信済み」と呼ばれる空の配列で始まり、メッセージを受け入れたモジュールはそのリストに追加されます。その後、コアは再起動し、そのメッセージ タイプにサブスクライブされているすべてのモジュールにメッセージを再送信します。
この問題を解決するためのより良い方法はありますか?
編集:すべてが非同期であることに注意してください。ストリームにパブリッシュされたメッセージは、モジュールがアイドル状態になるまでモジュールに送信されません。モジュールのリロードには数秒かかる場合があります。唯一のインスタント部分は、モジュールにメッセージを送信することです。モジュールは、メッセージを処理できる場合、即座に応答する必要があります。