最初に気づくべきことは、アプリケーションは、水平方向に拡大縮小するためにメッセージの親和性をなくすように設計されなければならないということです。アプリケーションの設計上の制約を克服するためにメッセージングトランスポートがどれくらい期待できるかには限界があります。メッセージのペイロードの内容に基づいてメッセージ配信ルート、シーケンス、または宛先を変更する処理は、トランスポートではなくESBにとって適切な仕事です。最適な解決策は、水平スケーリングに適したアーキテクチャでアプリケーションを再設計することです。
これは、メッセージグループを使用する方法の1つです。新しいグループを探すアプリケーションインスタンスは、JMSXGroupID
が1
ではないメッセージを無視する必要があります。メッセージを送信するアプリケーションは、それに応じてグループIDとシーケンス番号を設定する準備が必要です。
これを達成する別の方法は、インターセプトとディスパッチです。プログラムはメインキューを読み取り、IDの新しいインスタンスを探します。新しいIDが見つかると、そのメッセージを別のディスパッチキューに移動します。消費しているアプリケーションインスタンスはすべてディスパッチキューを読み取り、作業を探します。このキュー内のIDは一意であることが保証されているため、各Idは特定のアプリケーションインスタンスに割り当てられます。次に、IDのセレクタを使用して処理するプライマリキューを開きます。プロデューサアプリケーションでは、選択を可能にするためにIDをメッセージプロパティまたは相関IDフィールドに設定する必要がありますが、グループを管理する必要はありません。