3

私は、IBM Websphere MQ で JMS キューを使用して負荷分散動作を実現しようとしている人と協力しています。そのため、同じキューから読み取るように構成された複数の Camel JMS コンシューマーがあります。この動作は JMS 仕様 (最後に調べたとき) によると定義されていませんが、一種のラウンドロビン/負荷分散動作を期待しています。仕様ではこれを未定義のままにしていますが、Websphere MQ の通常の動作はメッセージをコンシューマーの 1 つだけに配信することであり、ある種の負荷分散を行う可能性があると私は信じています。たとえば、ここを参照してください:複数の MessageConsumer が同じキュー (Websphere MQ) に接続する場合、メッセージ コンシューマの負荷を分散する方法は?

しかし、この特定のケースでは、両方のコンシューマーが同じメッセージを受信して​​いるように見えます。

Websphere MQ の専門家である人なら誰でも、これに光を当てることができますか? この動作が予想される状況はありますか? これを軽減できる構成変更はありますか?

ここにいる全員に、ネイティブの Websphere MQ クラスタリング機能を使用して、複数のコンシューマが同じ Queue を指すのをやめるように言いたいところですが、それは彼らにとって大きな変化になるので、それを実現する方法を見つけたいと思っています。この作品。

私は未定義のものに頼るのが好きというわけではありませんが、彼らが IBM 固有の振る舞いに頼るつもりなら、それは彼らに任せます。

4

1 に答える 1

3

両方が同じメッセージを受信する唯一の方法は次のとおりです。

  1. メッセージの複数のコピーがあります。
  2. アプリはロックなしでメッセージを閲覧してから、一周して削除します。
  3. アプリはトランザクションを取り消し、メッセージを再び利用できるようにしています。
  4. アプリがメッセージを確認する前に、接続が切断されます。

複数のアプリがキュー内のメッセージを競合するようにすることをお勧めします。1 つのアプリがダウンしても、キューは引き続き処理されます。クラスタでは、クラスタが満杯になるまで、未処理のキュー インスタンスにメッセージを送信し続けるため、これは非常に重要です。

開発システムの場合は、 SupportPac MA0Wをインストールし、その 1 つのキューだけをトレースするように指示すると、何が起こっているかを正確に確認できます。

セクション 4.4 の JMS 仕様を参照してください。プロバイダーは、確認済みメッセージの 2 番目のコピーを配信してはなりません。上記の #4 で取り上げた 4.4.13 のセッション処理には例外があります。これは明確であり、公式仕様の一部であるため、IBM 固有の動作ではありません。

于 2013-04-17T21:52:25.290 に答える