JAX-RPCを使用した場合のデッドレターキューに不正な要求を配置する方法はありますか?

StackOverflow https://stackoverflow.com/questions/1567526

  •  21-09-2019
  •  | 
  •  

質問

私は、WebSphere MQを介して通信して、WAS 6.0上で動作しているアプリケーションのセットのためのサービスを生成するために、JAX-RPC 1.1を使用しています。メインフレームは、メッセージが(おそらくによるEBCDICからASCIIすごみに)オブジェクトに変換することができないいくつかの理由であれば、メッセージのニーズが検査のためにデッドレターキューに配置されるように、サービスにメッセージを送信しますます。

ん誰のノウハウ(JMSを提供することにより、すなわち:DLQ名で/アドレス)、これを行うための標準的な方法があるかどうか、DLQ-転送が

手動で何とか実行する必要があるでしょうか?
役に立ちましたか?

解決

まず、私はあなたがこのためにDLQに依存しないことをお勧めしてみましょう。 DLQは、チャネルが解決できない店舗のメッセージに使用されているQMGRレベルのリソースです。それは潜在的な攻撃ベクトルであるため、ほとんどのセキュリティ意識の高いお店は、アプリケーションへのアクセスを許可していないか、または、彼らはそれがされて置く専用アクセスを行います。

これを行うための最善の方法は、アプリケーション固有の例外キューを作成することです。アプリはいくつかの入力キューを持っている場合、それらはすべて同じ例外キューを使用することができますし、アプリケーションのサポートチームは、すべてのメッセージを管理できるセキュリティ問題のない土地があります。

どちらのあなたが行く道、これは非常に簡単です称えるためにアプリを取得。たとえば、あなたのアプリがJAX.SVC.REQUESTから読んでいると仮定します。あなたは例外キューを定義し、それをBOQ *フィールドを指します:

DEF QL(JAX.SVC.EXCEPTION) ALTER QL(JAX.SVC.REQUEST)BOQNAME(JAX.SVC.EXCEPTION)BOQTHRESH(5)

JMSクラスは、それが開かれ、各メッセージの読み取りのバックアウトカウントをチェックしたとき*キューの属性BOQに問い合わせます。あなたのプログラムでは、トランザクションセッションを使用して、メッセージを処理できない場合は、session.backout()メソッドを呼び出します。メッセージを読んでいないとBOQNAMEにという名前のキューに再キューイング、その後、これ以上BOTHRESH時間よりもバックアウトされます。そのキューがいっぱいか使用できない場合はDLQが試行されます。それが失敗した場合、クラスが例外をスローします。

我々は、例えば、QMGRがシャットダウンされた場合に加工メッセージをバックアウトされる可能性を可能にするためにBOTHRESH> 1ピック

何かがそれに土地ならば、それは警報を発するか、電子メールを送信できるように、

私は通常、例外キューをトリガします。あなたは監視ツールを持っている場合は、代わりに深さ> 0かどうかを確認することができます。

何らかの理由でヨーヨーが自動的にメッセージをキューに再登録JMS機能を使用したくない場合は、

、アプリケーションがそれを再キューイングするロジックが必要になります。あなたがDLQ上のメッセージを配置した場合、あなたはDLQヘッダーを付加することになるでしょう。そうしないと、おそらくDLQハンドラーまたはそのキューを見て、他の機器を中断します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top