0

JMSには、キューとトピックがあります。私が理解しているように、これまでのところ、キューはプロデューサー/コンシューマーシナリオに最適ですが、トピックはパブリッシュ/サブスクライブに使用できます。ただし、私のシナリオでは、両方のアプローチを組み合わせて、プロデューサー-コンシューマー-オブザーバーアーキテクチャを作成する方法が必要です。

特に、いくつかのキューに書き込むプロデューサーと、これらのキューから読み取り、それらのキュー内のメッセージを処理してから、別のキュー(またはトピック)に書き込むワーカーがあります。ワーカーがジョブを実行するたびに、GUIに通知し、現在のシステム状態の表現を更新する必要があります。ワーカーとGUIは異なるプロセスであるため、単純なオブザーバーパターンを適用したり、GUIに直接通知したりすることはできません。

キューやトピックの組み合わせを使用してこれを実現するための最良の方法は何ですか?GUIは常に通知を受ける必要がありますが、キューから何かを消費することはありませんか?

これをJMSで直接解決し、RMIなどの追加テクノロジーを使用してオブザーバー部分を実装しないようにします。

より具体的な例を挙げます。

  1. PACKAGEQUEUEマシン(PackageProducer)によって生成されたパッケージ()のキューがあります
  2. アドレスを追加してからパッケージを取得し、PACKAGEQUEUEそれをMAILQUEUEAddressWorker)に書き込むワーカーがいます。
  3. 別のワーカーがを処理しMAILQUEUE、パッケージをメールで送信します(MailWorker)。
  4. 手順2の後、メッセージがに書き込まれたときにMAILQUEUE、GUIに通知し、パッケージのステータスを更新したいと思います。もちろん、GUIはのメッセージを消費するべきではなく、メッセージを消費する必要MAILQUEUEがあるだけMailWorkerです。
4

1 に答える 1

1

ソリューションには、キューとトピックの組み合わせを使用できます。

GUIアプリケーションは、たとえば、トピックをサブスクライブできますMAILQUEUE_NOTIFICATIONPackageProducerにメッセージを書き込むたびに(つまり、ステップ2で)MAILQUEUE、そのメッセージのコピーをMAILQUEUE_NOTIFICATIONトピックに公開する必要があります。GUIアプリケーションはトピックをサブスクライブしているため、パッケージのステータスに関する情報を含むパブリケーションを取得します。GUIは、そのパブリケーションの内容で更新できます。

HTH

于 2012-05-11T15:12:31.470 に答える