2.0 以降の 2.1 の変更点

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

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

バージョン 4.0 以降、クライアントはデフォルトで自動回復を有効にします。この機能と互換性がありますが、Spring AMQP には独自の回復メカニズムがあり、通常、クライアント回復機能は必要ありません。ブローカーが使用可能であるが接続がまだ回復していない場合に AutoRecoverConnectionNotCurrentlyOpenException インスタンスを取得しないように、amqp-client 自動回復を無効にすることをお勧めします。バージョン 1.7.1 以降、独自の RabbitMQ 接続ファクトリを明示的に作成して CachingConnectionFactory に提供しない限り、Spring AMQP はそれを無効にします。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) を使用することを推奨して非推奨になりました。詳細については、管理 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 実装が追加されました。

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