WebSphere MQ をリッスンする MDB があります。キューが受信した順序でメッセージを取得するわけではありません。その順番で読めるようにするにはどうしたらいいですか?出来ますか?MDB を使用しないでください。
質問する
4467 次
2 に答える
5
一般に、WMQ は受信した順にメッセージを配信します。ただし、いくつかのことが影響する可能性があります...
- キューが FIFO 配信ではなく優先度に設定されていて、メッセージが異なる優先度で到着した場合、メッセージは「順不同」に配信されます。
- 生産された注文と配達された注文を区別します。メッセージがリモート QMgr で生成され、ローカル QMgr へのパスが複数ある場合、メッセージが順不同で到着する可能性があります。
- 永続性の違い - メッセージがリモート QMgr で生成され、永続性が異なる場合、特にチャネル NPMSPEED(FAST) が設定されている場合、非永続メッセージが永続メッセージよりも早く到着する可能性があります。
- 複数のリーダー/ライター - シーケンスに対する依存関係は、単一のプロデューサーが単一のパスを介して単一のコンシューマーに送信することを意味します。プロデューサー、コンシューマー、またはそれらの間のパスに冗長性があると、メッセージが順不同で配信される可能性があります。
- 同期点 - シーケンスを保持するには、すべてのメッセージを同期点の下で書き込んで消費する必要があります。そうでなければ、すべてのメッセージを同期点の外で書き込んで消費する必要があります。
- セレクター - これらは特に、キュー内のすべてのメッセージのコンテキストに関して順不同でメッセージを配信することを目的としています。
- メッセージ グループ - グループ化されたメッセージの取得は、通常、グループ全体が存在するまで待機します。グループがインターリーブされている場合、メッセージは順不同で配信されます。
- DLQ - ターゲット キューがいっぱいになると、メッセージが DLQ に配信される場合があります。ターゲット キューが空になると、メッセージがそこに戻り始めます。容量に近いキューでは、メッセージはターゲット キューと DLQ を交互に使用できます。
したがって、MDB が順不同でメッセージを受信している場合、これらのいずれか、またはいくつかの組み合わせが原因である可能性があります。メッセージ シーケンスへの依存を排除する (最良の選択) か、設計を見直して、順序どおりでない処理につながる可能性のあるすべての要因を調整します。
于 2010-12-11T21:43:10.970 に答える
3
T.Rob のリストに追加するために、MDB はアプリケーション サーバー WorkManager を使用してメッセージ配信をスケジュールするため、メッセージの順序は WorkManager が Work アイテムを開始する順序にも依存します。これは WMQ の制御外です。MDB ServerSessionPool の深さを 1 に制限すると、実行中の Work インスタンスが 1 つだけになるため、この制限はなくなりますが、最大スループットが低下します。
WebSphere アプリケーション サーバーで実行している場合、ListenerPorts を使用した非 ASF モードは、いくつかのトランザクション/バックアウトの警告に従ってメッセージの順序を保持できます。ここにサポート技術情報があります:
于 2011-07-19T08:50:01.307 に答える