Spring Integrationライブラリについて直接コメントすることはできないため、RabbitMQに関して一般的に説明します。
アグリゲーターのSpringIntegration実装に100%確信がなく、自分で実装しようとしている場合はtx
、RabbitMQの内部でトランザクションを使用するものを使用しないことをお勧めします。
RabbitMQのトランザクションは低速であり、トラフィック/スループットの高いシステムを構築している場合は、パフォーマンスの問題が確実に発生します。
むしろ、RabbitMQに実装されているAMQPの拡張機能であるPublisherConfirmsを確認することをお勧めします。これは、新しいhttp://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/での紹介です。
パフォーマンスを正しくするには、プリフェッチ設定を微調整する必要があります。http: //www.rabbitmq.com/blog/2012/05/11/some-queuing-theory-throughput-latency-and-bandwidth/をご覧ください。詳細については。
上記のすべてはあなたにあなたの問題を解決するのを助けるためにあなたにいくつかの背景を与えます。実装はかなり簡単です。
コンシューマーを作成するときは、ACKが必要になるように設定する必要があります。
- n個のメッセージをデキューします。デキューするときに、各メッセージのDeliveryTagをメモする必要があります(これはメッセージのACKを確認するために使用されます)
- メッセージを新しいメッセージに集約します
- 新しいメッセージを公開する
- デキューされた各メッセージをACKする
注意すべき点の1つは、消費者が3を過ぎてから、4が完了する前に死亡した場合、ACKされなかったメッセージは、復活したときに再処理されるということです。