1

Java でプロデューサー/コンシューマー パターンを作成しようとしています。私は、一連の異なる接続を介して多くのサーバーに接続されているネットワーク クライアントです。サーバーはさまざまな「作業」パケットを生成し、それらはすべて 1 つのブロッキング キューに入れられます。私がやろうとしているのは、特定の種類の作業パケットのみが特定の消費者に配信されるように、消費者をブロックすることです。

例:

  • ブロッキング キューは、A、B、C の 3 種類のワーク パケット オブジェクトで満たされます。
  • 2 つのコンシューマーがワーク パケット オブジェクトを待機しています。コンシューマ 1 はタイプ A のみを必要とし、コンシューマ 2 はタイプ B または C のみを必要とします

java.util に標準クラスはありますか? それとも独自のクラスを作成する必要がありますか? また、必要に応じて自分でロールする最良の方法は何ですか?

前もって感謝します!

アンドリュー・クロファス

4

2 に答える 2

2

この動作は、標準の JMS で実現できます。プロデューサーは、JMS トピックに配置されるメッセージを作成します。コンシューマーは、フィルタリングされたサブスクリプションを使用してトピックにサブスクライブします。これにより、サブスクライバー X はタイプ X のメッセージのみを取得します。( APIでのサブスクリプションの詳細)

永続的なサブスクライバーは、カバーされるサブスクライバーごとにメッセージをキューに入れるという要件を満たします。

これはパブ/サブ モデルです。

于 2012-07-11T20:05:13.007 に答える
2

java.util でこれを行う標準的な方法はありませんが、簡単な設計を次に示します。

A、B、C はすべてインターフェイス D を実装しており、A が B および C と順不同で処理されても問題ないと仮定しています。

並べ替えコンシューマのセットを持つ単一の「入力」BlockingQueue を用意します。これらのコンシューマーは、キュー内のオブジェクトのタイプを決定し、実際のワーカーが取得する個別のタイプ固有の「出力」キューにそれらをフィードします。キューが 1 つしかないという制約はありますか?

于 2012-07-10T22:53:36.293 に答える