IBM MQ メッセージング・プロバイダーおよびメッセージ駆動型 Bean (MDB) アプリケーションでの厳密なメッセージ順序付け
ある種の非同期メッセージング・アプリケーションでは、メッセージの順序付けが重要です。 つまり、プロデューサーが送信するのと同じ順序でメッセージを処理する必要があります。 ご使用のアプリケーションでこのタイプのメッセージの順序付けが重要な位置を占める場合は、 それを考慮に入れて設計する必要があります。
例えば、座席予約を処理するメッセージング・アプリケーションに、プロデューサー・コンポーネントが複数とコンシューマー・コンポーネントが 1 つあるとします。 カスタマーが座席を予約すると、プロデューサー・コンポーネントがコンシューマー・コンポーネントにメッセージを送信します。 カスタマーが予約を取り消すと、同じプロデューサー (場合によっては別のプロデューサー) が 2 番目のメッセージを送信します。 通常、コンシューマー・コンポーネントは、最初のメッセージ (座席の予約) を処理してからでなければ、2 番目のメッセージ (予約の取り消し) を処理できません。
一部のアプリケーションでは同期 (要求応答) パターンが使用されます。 その場合、プロデューサーは各メッセージに対する応答を待ってから、次のメッセージを送信します。 このタイプのアプリケーションでは、コンシューマーがメッセージの受信順序を制御して、 それがプロデューサー (複数可) の送信順序と同じにすることができます。 他のアプリケーションには非同期 (応答不要送信) パターンを使用するものもあり、 その場合、プロデューサーは応答を待たずにメッセージを送信します。 このタイプのアプリケーションでも、通常は順序が保持されます。つまり、コンシューマーは、特に連続したメッセージが十分な時間間隔で送信される場合には、メッセージの受信順序がプロデューサー (複数可) の送信順序と同じだと考えます。 しかし、設計段階ではこの順序が乱れる要因も考慮に入れる必要があります。
アプリケーションが送信するメッセージの優先順位が異なる場合 (優先順位の高いメッセージが優先順位の低いメッセージを追い越す可能性があります)、あるいはアプリケーションがメッセージ・セレクターを指定して最初のメッセージ以外のメッセージを明示的に受信する場合には、メッセージの順序が乱れます。 並列処理や、エラー処理または例外処理もメッセージの順序付けに影響を及ぼすことがあります。