Spring と RabbitMQ を使用してプロジェクトをセットアップしています。現在、別の非同期プロセスが完了するまで処理できない amqp メッセージをアプリケーションが受信する可能性があります (レガシーで完全に切り離されており、制御できません)。その結果、メッセージの処理をしばらく待たなければならない場合があります。この結果は、トランスフォーマーの例外です。
メッセージが rabbitMQ に NACK で返されると、メッセージはキューの先頭に戻され、すぐに再プルされます。同時リスナーの数と同じ処理不能メッセージを受け取ると、ワークフローがロックアップします。処理可能な有効なメッセージがキューの後ろで待機している場合でも、メッセージが処理可能になるのを待って車輪を回転させます。
メッセージを拒否して amqp し、代わりにキューの末尾に戻す方法はありますか? 私の調査によると、rabbitMQ はかつてこのように機能していましたが、現在はキューの先頭のみを取得しているようです。
私の設定はかなり単純ですが、ここでの継続性のために...
接続ファクトリー: org.springframework.amqp.rabbit.connection.CachingConnectionFactory RabbitMQ 3.1.1
春の統合: 2.2.0
<si:channel id="channel"/>
<si-amqp:inbound-channel-adapter
queue-names="commit" channel="channel" connection-factory="amqpConnectionFactory"
acknowledge-mode="AUTO" concurrent-consumers="${listeners}"
channel-transacted="true"
transaction-manager="transactionManager"/>
<si:chain input-channel="channel" output-channel="nullChannel">
<si:transformer ref="transformer"></si:transformer>
<si:service-activator ref="activator"/>
</si:chain>