2

コンテンツが最終的にDBに永続化されるメッセージを送信するトピックにサブスクライブするMDBがあります。

MDB がプールされていることはわかっているため、コンテナーは複数の着信メッセージを並行して処理できます。私の場合、これらのメッセージが消費される (そして永続化される) 順序が重要です。メッセージが JMS トピックでパブリッシュされるときに、MDB インスタンス プールがメッセージを消費し、別の順序で保持することは望ましくありません。

これは問題になる可能性がありますか?もしそうなら、メッセージを消費するときに厳密な受信順序に従うようにコンテナに指示する方法はありますか?

4

2 に答える 2

2

MDB プールのサイズを 1 に制限して、メッセージが正しい順序で処理されるようにする必要があります。

もちろん、それでもある程度の並列処理が必要な場合は、いくつかのオプションがありますが、それは実際にはデータに依存します。

特定のメッセージに共通点があり、処理の順序が共通の値を共有するメッセージのグループ内でのみ問題になる場合は、複数のトピックを用意するか、キューとスレッドプールを使用する必要があります。

一方、メッセージの到着に関連するロジックの特定の部分を並行して実行でき、他の部分を並行して実行できない場合は、ロジックを並列 OK 部分と並列 OK でない部分に分割する必要があります。それに応じてそれらのビットを処理します。

于 2011-03-15T15:58:56.040 に答える
2

そこからコピー

クライアントがメッセージを送信した順序と受信順序が一致するようにするには、次の手順を実行する必要があります。

  • MDB の max-beans-in-free-pool を 1 に設定します。これにより、MDB がメッセージの唯一のコンシューマーになります。

  • MDB がクラスターにデプロイされている場合は、それらをクラスター内の 1 つのノードにデプロイします [...]。

  • トランザクションのロールバックと回復の際にメッセージの順序を確認するには、MessagesMaximum を 1 に設定してカスタム接続ファクトリを構成し、再配信の遅延が構成されていないことを確認します。詳細については、[...] を参照してください。
于 2011-03-15T17:13:55.943 に答える