0

多数のエンドポイント (エージェント) から多数のメッセージを取得する単純なプロジェクトがあります。これらのエージェントはすべて、同じ形式のメッセージ (データベースに配置されるエンティティ オブジェクト) を出力します。すべてのエージェントが 1 つのキューに書き込み、これらを消費して JPA 経由でデータベースに送信します。

したがって、基本的にシステムには、1 つのキューにメッセージを書き込むプロデューサーのコレクションがあります。キューはシングル スレッドであり、メッセージが受信されたときにそれを受け取り、データベースにダンプします。

ここでの問題は、この方法が遅いことです。ソースに基づいてこれらのメッセージを分割するために使用できる Camel の機能 (再シーケンスなど) はありますか? そのため、Agent1 からのメッセージは作成された順序で永続化する必要がありますが、Agent2 からのメッセージは別のものであるため、Agent1 のメッセージの順序で待機する必要はありません。2 つのエージェントの場合、エージェントごとに 1 つずつ、2 つのキューを作成するだけなので、これは簡単な問題です。多数のエージェントが存在するため、拡張可能なソリューションが必要です。

これをキャメルでネイティブに達成するパターンはありますか? エージェント名で同期し、1 つのメッセージのみをマルチスレッド JPA 書き込みキューに入れる独自のホールドアウト キューを作成することもできますが、これは、次のいずれかを行う必要があるため、少し回り道になります。キューから jpa camel ルートへのコールバックを設定するか、camel を使用せずに独自のマネージャーを介して実行します (これが複雑になるわけではありませんが、Camel などを使用してこれをすべて実行できれば素晴らしいことです)いわば、車輪を再発明する必要はありません)。

4

1 に答える 1

1

ソースが JMS メッセージ キューの場合は、メッセージ グループを参照してください。

これに関する Apache ActiveMQ ドキュメント: http://activemq.apache.org/message-groups.html

そして、この FAQ http://activemq.apache.org/how-do-i-preserve-order-of-messages.html

基本的に、JMSXGroupID JMS プロパティを使用して、agent1、agent2 などのエージェント ID をマークできます。

次に、JMSXGroupID に基づいて並行して実行できる JMS メッセージ キューに同時コンシューマーを設定できます。ただし、各グループ内の順序は維持されます。つまり、JPA エージェント 1、エージェント 2、... エージェント N に並行して書き込むことができます。

于 2011-10-17T07:43:34.447 に答える