2017-01-02 10 views
0

私は応答キューからの応答を数えることに問題があります。つまり、1日に1回、dbからデータを集めてキューに送信する作業を実行します。すべての回答を受け取ったら、接続を切断する必要があります。問題は、すべての回答が到着したかどうかを確認する方法です。これをグローバル変数に保持することは、同意問題のために危険です。何か案が ?私はJMSでかなり新しいです。多分ソリューションは明らかですが、私はそれを見ません。すべての応答を受け取った場合のJava、JMSシャットダウン接続。

答えて

0

あなたのスタックが何であるか、これを達成するために使用しているツールはわかりませんが、これを念頭に置いておいてください。

  1. キューに入れる予定のジョブごとにハッシュを生成し、並行リスト/マップに格納します。 (つまり、ConcurrentHashMap
  2. ジョブをキューに送信します。
  3. ジョブが完了し、応答を返すと、ハッシュを再現し、完了したすべてのジョブを保持する別の同時リスト/マップを格納します。

これで、実行されるはずのすべてのジョブと、応答があったジョブの2つのリストが作成されました。これを達成するための複数の方法があります。 Java Concurrencyを検索すると、多くのチュートリアルとドキュメントが見つかります。私はCyclicBarrier and CountDownLatch`を使用するのが好きです。これらの方法を使用する予定がある場合は、アプリケーションがハングしたり悪化したり、メモリ不足が発生したりするのを防ぐために、特別な注意を払ってください。

または、キューイングのリクエストと応答の数を単純に確認し、等しい場合は接続を切断します。

+0

こんにちは、ありがとう、私はJMS(IBM MQの実装)でスプリングブートを使用しています – user3528733

関連する問題