1

ExecutorService 固定スレッドプールと IBM MQ メッセージングを使用して、プロデューサーとコンシューマーに似たコードを作成する予定です。

コンシューマとして 10 個の固定スレッドを作成したとします。コンシューマ キューに 10 個のメッセージを配置すると、どのように処理されますか? 10 個のコンシューマー ワーカー スレッドは、以下のシナリオをどのようにカバーしますか?

  1. 各ワーカースレッドは単一のメッセージを同期的に受け取り、メッセージを処理しますか?

  2. 各コンシューマー ワーカー スレッドは、1 つのメッセージにつき 1 つのワーカー スレッドのように、これら 10 個のメッセージすべてを受け取りますか?

  3. 上記の 2 番目のシナリオとしてこのメ​​ッセージを読んだ後、各スレッドがエグゼキュータ サービスを呼び出す方法。

  4. キューに 20 個のメッセージがある場合、コンシューマー ワーカー スレッドはこれらのメッセージをどのように受け取りますか?各スレッドは 2 つのメッセージを受け取りますか? 1 つのスレッドに 1 つのメッセージが必要な場合、他の 10 個のメッセージはどうなりますか?

上記のシナリオの処理中に、Web サービス呼び出しと内部 API メソッド呼び出しがありますが、これらは同期メソッドです。このクラスを実装してコードを同時に処理する場合、使用法はありますか?

4

2 に答える 2

3

たとえば、WebSphere などのアプリケーション サーバーで実行している場合は、単純に Message Driven Bean (MDB) を JMS キューにデプロイするだけで、説明したこととほとんど同じことが実行されます。

Java アプリケーションを作成するだけの場合は、ExecutorService を使用するとうまくいきます。MessageListener を Session に配置することから始め、そのリスナーの onMessage() submit() でメッセージのプロセッサ (Runnable など) を ExecutorService に送信します。そのプロセッサが作業を完了すると、メッセージをacknowledge()する必要があります。

于 2013-08-13T22:35:02.913 に答える
0

JMSなどの優れたツールが既に実装、デバッグされ、多くの機能をサポートし、フレームワーク (たとえば Spring など) でサポートされている場合に、プロデューサー/コンシューマー スキームを実装するのは良い考えではないと思います。

車輪を発明するな!

于 2013-08-13T20:16:46.770 に答える