2.1 以降の 2.2 の変更点
このセクションでは、バージョン 2.1 とバージョン 2.2 の間の変更点について説明します。
パッケージの変更
次のクラス / インターフェースが org.springframework.amqp.rabbit.core.support
から org.springframework.amqp.rabbit.batch
に移動されました:
BatchingStrategy
MessageBatch
SimpleBatchingStrategy
さらに、ListenerExecutionFailedException
は org.springframework.amqp.rabbit.listener.exception
から org.springframework.amqp.rabbit.support
に移動されました。
依存関係の変更
JUnit (4) はオプションの依存関係になり、推移的な依存関係として表示されなくなりました。
spring-rabbit-junit
モジュールは、spring-rabbit-test
モジュールのコンパイル依存関係になり、単一の spring-rabbit-test
だけで AMQP コンポーネントのテストユーティリティの完全なスタックを取得する場合に、ターゲットアプリケーションの開発エクスペリエンスが向上します。
[[-breaking-api-changes]] == 「重大な」API 変更
JUnit (5) RabbitAvailableCondition.getBrokerRunning()
は、JUnit 4 に依存する BrokerRunning
の代わりに BrokerRunningSupport
インスタンスを返すようになりました。これは同じ API を持っているため、参照のクラス名を変更するだけです。詳細については、JUnit5 条件を参照してください。
ListenerContainer の変更
致命的な例外を含むメッセージは拒否され、確認モードが手動であってもデフォルトで再キューイングされません。詳細については、例外処理を参照してください。
リスナーのパフォーマンスは、Micrometer Timer
を使用して監視できるようになりました。詳細については、リスナーのパフォーマンスの監視を参照してください。
@RabbitListener の変更
各リスナーで executor
を構成し、ファクトリ構成を上書きして、リスナーに関連付けられたスレッドをより簡単に識別できるようになりました。コンテナーファクトリの acknowledgeMode
プロパティをアノテーションの ackMode
プロパティでオーバーライドできるようになりました。詳細については、コンテナーファクトリプロパティのオーバーライドを参照してください。
バッチ処理を使用する場合、@RabbitListener
メソッドは、一度に 1 つずつ取得するのではなく、1 回の呼び出しでメッセージの完全なバッチを受信できるようになりました。
バッチ処理されたメッセージを一度に 1 つずつ受信すると、最後のメッセージの isLastInBatch
メッセージプロパティが true に設定されます。
さらに、受信したバッチメッセージに amqp_batchSize
ヘッダーが含まれるようになりました。
バッチがプロデューサーによって作成されていない場合でも、リスナーは SimpleMessageListenerContainer
で作成されたバッチを使用することもできます。詳細については、コンテナーの選択を参照してください。
Spring Data 射影 インターフェースが Jackson2JsonMessageConverter
でサポートされるようになりました。詳細については、Spring Data 射影 インターフェースの使用を参照してください。
contentType
プロパティがない場合、またはデフォルト (application/octet-string
) の場合、Jackson2JsonMessageConverter
はコンテンツが JSON であると想定するようになりました。詳細については、Message
からの変換を参照してください。
同様に contentType
プロパティがない場合、またはデフォルト (application/octet-string
) の場合、Jackson2XmlMessageConverter
はコンテンツが XML であると想定するようになりました。詳細については、Jackson2XmlMessageConverter
を参照してください。
@RabbitListener
メソッドが結果を返す場合、応答メッセージプロパティで Bean および Method
を使用できるようになりました。これにより、beforeSendReplyMessagePostProcessor
の構成で、たとえば、応答にヘッダーを設定して、サーバーで呼び出されたメソッドを示すことができます。詳細については、返信管理を参照してください。
ReplyPostProcessor
を構成して、返信メッセージを送信前に変更できるようになりました。詳細については、返信管理を参照してください。
AMQP ロギングアペンダーの変更
Log4J および Logback AmqpAppender
は、verifyHostname
SSL オプションをサポートするようになりました。
また、これらのアペンダは、MDC エントリをヘッダーとして追加しないように構成できるようになりました。このような動作を構成するために、addMdcAsHeaders
ブール値オプションが導入されました。
アペンダーが SaslConfig
プロパティをサポートするようになりました。
詳細については、ロギングサブシステム AMQP アペンダを参照してください。
MessageListenerAdapter の変更
MessageListenerAdapter
は、ターゲットリスナーに渡される引数の配列を構築するための新しい buildListenerArguments(Object, Channel, Message)
メソッドを提供するようになりました。古いものは非推奨です。詳細については、MessageListenerAdapter
を参照してください。
[[exchange/queue-declaration-changes]] == Exchange/ キュー宣言の変更
RabbitAdmin
による宣言のために Exchange
および Queue
オブジェクトを作成するために使用される ExchangeBuilder
および QueueBuilder
流れるような API は、「既知の」引数をサポートするようになりました。詳細については、キューとエクスチェンジのビルダー API を参照してください。
RabbitAdmin
には新しいプロパティ explicitDeclarationsOnly
があります。詳細については、条件宣言を参照してください。
接続ファクトリの変更
CachingConnectionFactory
には新しいプロパティ shuffleAddresses
があります。ブローカーノードアドレスのリストを提供する場合、接続が試行される順序がランダムになるように、接続を作成する前にリストがシャッフルされます。詳細については、クラスターへの接続を参照してください。
Publisher の確認と戻りを使用すると、接続ファクトリの executor
でコールバックが呼び出されるようになりました。これにより、コールバック内から rabbit 操作を実行する場合に、amqp-clients
ライブラリでデッドロックが発生する可能性が回避されます。詳細については、相関するパブリッシャーの確認と return を参照してください。
また、パブリッシャーの確認型は、相互に排他的な 2 つの setter メソッドではなく、ConfirmType
列挙型で指定されるようになりました。
SSL が有効な場合、RabbitConnectionFactoryBean
はデフォルトで TLS 1.2 を使用するようになりました。詳細については、RabbitConnectionFactoryBean
と SSL の構成を参照してください。
新しい MessagePostProcessor クラス
メッセージ content-encoding が deflate
に設定されている場合に、クラス DeflaterPostProcessor
および InflaterPostProcessor
がそれぞれ圧縮および圧縮解除をサポートするために追加されました。
その他の変更
Declarables
オブジェクト (複数のキュー、エクスチェンジ、バインディングを宣言するため) には、型ごとにフィルター処理された getter が含まれるようになりました。詳細については、交換、キュー、バインディングのコレクションの宣言を参照してください。
RabbitAdmin
がその宣言を処理する前に、各 Declarable
Bean をカスタマイズできるようになりました。詳細については、交換、キュー、バインディングの自動宣言を参照してください。
x-single-active-consumer
キュー引数を設定するために、QueueBuilder
に singleActiveConsumer()
が追加されました。詳細については、キューとエクスチェンジのビルダー API を参照してください。
型 Class<?>
の値を持つ送信ヘッダーは、toString()
の代わりに getName()
を使用してマップされるようになりました。詳細については、メッセージプロパティコンバーターを参照してください。
失敗したプロデューサー作成のバッチのリカバリがサポートされるようになりました。詳細については、バッチリスナーで再試行を参照してください。