ここで質問するのが良いのか、Programmers.SEで質問するのが良いのかわかりません。間違っている場合は、移行してください。
まず、私が実装しようとしていることについて少し説明します。1つのソース(socket.ioクライアント)からメッセージを取得し、メッセージを処理するnode.jsアプリケーションがあります。これにより、送信者またはその中の他のクライアントに0個以上のメッセージが返される可能性があります。グループ。
処理については、基本的にメッセージをキューに入れて、さまざまなメッセージプロセッサを通過し、独自のアイテムを開始する可能性があります。最終的に、socket.ioを実行しているビットに「ねえ、これを送信してください」と通知されます。メッセージバック」
具体的な例として、ユーザーがサービスにサインインすると、そのサインインメッセージはキューに入れられ、承認プロセッサがそれを取得し、それを実行してから、クライアントが承認されたことを示すメッセージをキューに戻します。これは、関心のある可能性のある他のクライアントとともに、クライアントに接続されているsocket.ioソケットに戻ります。また、承認でより多くの処理を実行する可能性のある他のサブシステムに移動することもできます(ユーザー情報の検索、データに基づいてクライアントにさらに情報を送信するなど)。
強力な結合が必要な場合、これは簡単ですが、以前に試したところ、非常に壊れやすいスパゲッティコードが混乱するため、これは避けたいと思います。セットアップのもう1つの問題は、これがクラスター化可能である必要があることです。これが実際の問題の原因です。たとえば、複数の承認プロセッサーが実行されている可能性があります。ただし、許可メッセージは1回だけ処理する必要があります。
つまり、基本的に、メッセージのサブスクライバーの複数の「グループ」を作成できるパターン/手法を探しています。メッセージは、グループごとに1回だけ処理されます。
プロセッサの各インスタンスに、Reidsでリストとして使用される一意の名前を生成させることを考えました。次に、この名前はある種のディスパッチハンドラーに登録され、そのサブスクライバーのグループのセットに配置されます。次に、メッセージが到着すると、ディスパッチはそのセットからランダムなメンバーを引き出し、それをそのリストに配置します。これはうまくいくように見えますが、やや複雑すぎて壊れやすいようです。
中心的な問題は、私がこのようなシステムを設計したことがないことです。そのため、使用または検索する適切な用語さえわかりません。誰かが私をこれに対して正しい方向に向けることができれば、私は最も感謝するでしょう。