2017-02-02 13 views
0

私はタイトルの中に必要なものすべてを書いていると思います。したがって、いくつかのWMBフローがあります。そして1つは答えを待ち行列で待つ。タイムアウト後にキューにメッセージがない場合、例外をスローする必要があります。タイムアウト後にメッセージがキューに入らない場合の対処方法。 Message Brokerで可能ですか?

は、はい、それはpossibeですが、あなたはあなたの流れでそれを開発する必要がありますあなたの時間

答えて

1

いただきありがとうございます。 MQは非同期通信用に作られているので、タイムアウトは本来のものではありません。私は今、2つの可能な解決策を考えることができます。

  • は、要求を送信した後、あなたはTimeoutControlノードを追加し、設定し、リクエストを送信するフローでは、あなたの流れに

をTimeoutControlとTimeoutNotificationノードを使用します希望のタイムアウト 新しいフローを作成します。これは、TimeoutNotificationフローから始まります。そのフローでは、応答がまだ受信されていない場合は、タイムアウトエラーを送信します。 どのレスポンスが受信されたかを知るためには、リクエストを送信するフローとレスポンスを受け取るフローがデータベーステーブルを維持できるなど、別の方法を使用することも、この情報をキューに格納することもできます。

  • スタートノードを取得しますMQ続いMQ入力して開始するためのレスポンスハンドラの流れを設定し、要求

を送信後、応答を待っています。待ち時間を設定できるMQ Getを使用して、タイムアウトのしきい値になる応答を待ち受けます。 MQ Inputは、リクエストを送信した後、リクエスト送信者フローによって送信された技術的なメッセージを取得します。 これは、レスポンスをリッスンしながらメッセージフロースレッドをブロックするため、最初の方が悪い解決策です。

または、リクエストを送信して応答を受信し、MQ Getノードで応答を受信するだけで1つのフローを作成できます。 リクエストを送信するMQ出力のトランザクション性をオフにする必要があるため、これはさらに悪化します。

+0

アッティラ、一つを明確にしてください。最初のシナリオを使用する場合、3つのフローがあります。 1つはリクエスト、1つはTimeoutNotification、もう1つはレスポンス処理です。例:要求は正常に完了し、応答は受信されますが、タイマーは実行を継続し、メッセージをTimeoutNotificationに送信します。私が正しいことを理解すれば、エラーはとにかく送信されます。それを避ける方法は? –

+0

正解ですが、3つのフローがあります。リクエストフローでは、応答を待っているメッセージIDを保存する必要があります。そしてあなたが応答を受け取ったら、あなたはそのIDを削除します。したがって、リストにあるMsgIdでタイムアウトが発生すると、タイムアウト・フローだけがエラーを送信します。 TimeoutControlノードは、TimeoutNotificationノードに送信されるデータを格納できます。このノードには、タイムアウトを開始するメッセージのMsgIdを格納できます。また、応答を待っているMsgIdのリストは、どのような方法であれ、DB、Q、または共有変数などに格納できます。 –

関連する問題