2012-01-03 23 views
1

WASクラスターにデプロイされるアプリケーションを開発しています。このアプリケーションは、多数のJMS(Websphere MQ)キューからメッセージを消費し、結果を単一のデータベースに書き込みます。Websphere Application ServerクラスターおよびJMSメッセージの消費

ただし、アプリ内では、特定のIDのすべてのメッセージが一度に1つずつ処理されるという要件があります。現在、同期コレクションを使用してこれを実施していますが、これはクラスタでは機能しません。

これを実現するにはアプリケーション/クラスタ/アクティベーション仕様を設定する方法がありますか?

答えて

0

最初に気づくべきことは、アプリケーションは、水平方向に拡大縮小するためにメッセージの親和性をなくすように設計されなければならないということです。アプリケーションの設計上の制約を克服するためにメッセージングトランスポートがどれくらい期待できるかには限界があります。メッセージのペイロードの内容に基づいてメッセージ配信ルート、シーケンス、または宛先を変更する処理は、トランスポートではなくESBにとって適切な仕事です。最適な解決策は、水平スケーリングに適したアーキテクチャでアプリケーションを再設計することです。

これは、メッセージグループを使用する方法の1つです。新しいグループを探すアプリケーションインスタンスは、JMSXGroupID1ではないメッセージを無視する必要があります。メッセージを送信するアプリケーションは、それに応じてグループIDとシーケンス番号を設定する準備が必要です。

これを達成する別の方法は、インターセプトとディスパッチです。プログラムはメインキューを読み取り、IDの新しいインスタンスを探します。新しいIDが見つかると、そのメッセージを別のディスパッチキューに移動します。消費しているアプリケーションインスタンスはすべてディスパッチキューを読み取り、作業を探します。このキュー内のIDは一意であることが保証されているため、各Idは特定のアプリケーションインスタンスに割り当てられます。次に、IDのセレクタを使用して処理するプライマリキューを開きます。プロデューサアプリケーションでは、選択を可能にするためにIDをメッセージプロパティまたは相関IDフィールドに設定する必要がありますが、グループを管理する必要はありません。

0

私は、我々は1つのだけのリクエストを処理するMDBを持っている...あなたと前の応答者の両方が、私よりもこのことについてもっとたくさん知っているが、念のために、これが役立つこと

を伝えることができますクラスタ全体の時間であるため、アクティベーション仕様の「最大同時エンドポイント」を1に設定します。

この特定のIDには異なる宛先を使用することも、初期宛先のロジックにIDを再キューイングさせることもできますこの2番目の目的地へ?

関連する問題