JMSには、キューとトピックがあります。私が理解しているように、これまでのところ、キューはプロデューサー/コンシューマーシナリオに最適ですが、トピックはパブリッシュ/サブスクライブに使用できます。ただし、私のシナリオでは、両方のアプローチを組み合わせて、プロデューサー-コンシューマー-オブザーバーアーキテクチャを作成する方法が必要です。
特に、いくつかのキューに書き込むプロデューサーと、これらのキューから読み取り、それらのキュー内のメッセージを処理してから、別のキュー(またはトピック)に書き込むワーカーがあります。ワーカーがジョブを実行するたびに、GUIに通知し、現在のシステム状態の表現を更新する必要があります。ワーカーとGUIは異なるプロセスであるため、単純なオブザーバーパターンを適用したり、GUIに直接通知したりすることはできません。
キューやトピックの組み合わせを使用してこれを実現するための最良の方法は何ですか?GUIは常に通知を受ける必要がありますが、キューから何かを消費することはありませんか?
これをJMSで直接解決し、RMIなどの追加テクノロジーを使用してオブザーバー部分を実装しないようにします。
より具体的な例を挙げます。
PACKAGEQUEUE
マシン(PackageProducer
)によって生成されたパッケージ()のキューがあります- アドレスを追加してからパッケージを取得し、
PACKAGEQUEUE
それをMAILQUEUE
(AddressWorker
)に書き込むワーカーがいます。 - 別のワーカーがを処理し
MAILQUEUE
、パッケージをメールで送信します(MailWorker
)。 - 手順2の後、メッセージがに書き込まれたときに
MAILQUEUE
、GUIに通知し、パッケージのステータスを更新したいと思います。もちろん、GUIはのメッセージを消費するべきではなく、メッセージを消費する必要MAILQUEUE
があるだけMailWorker
です。