最新の安定バージョンについては、Spring AMQP 4.1.1 を使用してください!

2.0 以降の 2.1 の変更点

AMQP クライアントライブラリ

Spring AMQP は、RabbitMQ チームが提供する amqp-client ライブラリの 5.4.x バージョンを使用するようになりました。このクライアントは、デフォルトで自動復旧が設定されています。RabbitMQ 自動接続 / トポロジリカバリを参照してください。

バージョン 4.0 以降、クライアントはデフォルトで自動リカバリを有効にします。Spring AMQP はこの機能と互換性がありますが、独自のリカバリメカニズムを備えているため、クライアントのリカバリ機能は通常必要ありません。ブローカーが利用可能でも接続がまだ回復していない場合に AutoRecoverConnectionNotCurrentlyOpenException インスタンスが取得されるのを避けるため、amqp-client の自動リカバリを無効にすることをお勧めします。バージョン 1.7.1 以降、Spring AMQP は、独自の RabbitMQ 接続ファクトリを明示的に作成して CachingConnectionFactory に提供しない限り、自動リカバリを無効にします。RabbitConnectionFactoryBean によって作成された RabbitMQ ConnectionFactory インスタンスも、デフォルトでこのオプションが無効になっています。

パッケージの変更

一部のクラスは別のパッケージに移動しました。ほとんどは内部クラスであり、ユーザーアプリケーションには影響しません。2 つの例外は ChannelAwareMessageListener と RabbitListenerErrorHandler です。これらのインターフェースは現在 org.springframework.amqp.rabbit.listener.api にあります。

パブリッシャーが変更を確認

パブリッシャーの確認が有効になっているチャネルは、未処理の確認がある間はキャッシュに返されません。詳細については、相関するパブリッシャーの確認と return を参照してください。

リスナーコンテナーファクトリの改善

リスナーコンテナーファクトリを使用して、@RabbitListener アノテーションまたは @RabbitListenerEndpointRegistry で使用するためのリスナーコンテナーだけでなく、任意のリスナーコンテナーを作成できるようになりました。詳細については、コンテナーファクトリの使用を参照してください。

ChannelAwareMessageListener は MessageListener を継承するようになりました。

ブローカーイベントリスナー

選択したブローカーイベントを ApplicationEvent インスタンスとして公開するために、BrokerEventListener が導入されました。詳細については、ブローカーイベントリスナーを参照してください。

RabbitAdmin の変更

RabbitAdmin は、型 Declarables (Declarable - QueueExchangeBinding オブジェクトのコンテナー) の Bean を検出し、ブローカーで含まれているオブジェクトを宣言します。ユーザーは、<Collection<Queue>> (およびその他) を宣言する古いメカニズムを使用することをお勧めしません。代わりに Declarables Bean を使用する必要があります。デフォルトでは、古いメカニズムは無効になっています。詳細については、交換、キュー、バインディングのコレクションの宣言を参照してください。

AnonymousQueue インスタンスは、デフォルトで x-queue-master-locator が client-local に設定されて宣言されるようになり、アプリケーションが接続されているノードでキューが確実に作成されるようになりました。詳細については、ブローカーの構成を参照してください。

RabbitTemplate の変更

sendAndReceive() 操作で応答コンシューマーの noLocal フラグを制御するために、noLocalReplyConsumer オプションを使用して RabbitTemplate を構成できるようになりました。詳細については、リクエスト / 応答メッセージを参照してください。

パブリッシャー確認用の CorrelationData に ListenableFuture が追加されました。これを使用して、コールバックを使用する代わりに確認を取得できます。return と確認が有効になっている場合、相関データが提供されている場合は、返されたメッセージが入力されます。詳細については、相関するパブリッシャーの確認と return を参照してください。

応答がタイムアウトしたことをサブクラスに通知する replyTimedOut と呼ばれるメソッドが提供され、状態のクリーンアップが可能になりました。詳細については、返信タイムアウトを参照してください。

応答が配信されたときに例外が発生した場合 (たとえば、応答の遅延)、DirectReplyToMessageListenerContainer (デフォルト) でリクエスト / 応答を使用するときに、ErrorHandler が呼び出されるように指定できるようになりました。RabbitTemplate の setReplyErrorHandler を参照してください。(これも 2.0.11 以来)。

メッセージ変換

メッセージの XML 形式との間の変換をサポートするために、新しい Jackson2XmlMessageConverter を導入しました。詳細については、Jackson2XmlMessageConverter を参照してください。

管理 REST API

RabbitManagementTemplate は、直接 com.rabbitmq.http.client.Client (または com.rabbitmq.http.client.ReactorNettyClient) を使用することを推奨して非推奨になりました。詳細については、RabbitMQ REST API を参照してください。

@RabbitListener の変更

リスナーコンテナーファクトリを RetryTemplate で構成できるようになりました。オプションで、応答を送信するときに使用される RecoveryCallback を使用することもできます。詳細については、リスナーエンドポイントアノテーションを有効にするを参照してください。

非同期 @RabbitListener リターン

@RabbitListener メソッドは ListenableFuture<?> または Mono<?> を返すことができるようになりました。詳細については、非同期 @RabbitListener 戻り型を参照してください。

接続ファクトリ Bean の変更点

デフォルトでは、RabbitConnectionFactoryBean は enableHostnameVerification() を呼び出すようになりました。以前の動作に戻すには、enableHostnameVerification プロパティを false に設定します。

接続ファクトリの変更

CachingConnectionFactory は、コンストラクターで事前構成済みのインスタンスが提供されている場合でも、基盤となる RabbitMQ ConnectionFactory の自動リカバリを無条件に無効にします。Spring AMQP を自動リカバリと互換性を持たせるための措置が講じられてきましたが、課題が残る特定の特殊なケースが発生しています。Spring AMQP は 1.0.0 以降独自のリカバリメカニズムを備えているため、クライアントが提供するリカバリを使用する必要はありません。CachingConnectionFactory の構築後に (cachingConnectionFactory.getRabbitConnectionFactory() .setAutomaticRecoveryEnabled() を使用して) この機能を有効にすることは可能ですが、強くお勧めしません。クライアントファクトリを直接使用する場合 (Spring AMQP コンポーネントを使用するのではなく) に自動リカバリ接続が必要な場合は、別の RabbitMQ ConnectionFactory を使用することをお勧めします。

リスナーコンテナーの変更

デフォルトの ConditionalRejectingErrorHandler は、x-death ヘッダーが存在する場合に致命的なエラーを引き起こすメッセージを完全に破棄するようになりました。詳細については、例外処理を参照してください。

即時リキュー

メッセージを再キューイングする必要があることをリスナーコンテナーに通知するために、新しい ImmediateRequeueAmqpException が導入されました。この機能を使用するために、新しい ImmediateRequeueMessageRecoverer 実装が追加されました。

詳細については、メッセージリスナーと非同期ケースを参照してください。