1.5 以降の 1.6 の変更点

テストサポート

新しいテストサポートライブラリが提供されるようになりました。詳細については、テストサポートを参照してください。

ビルダー

Queue および Exchange オブジェクトを構成するための流れるような API を提供するビルダーが利用可能になりました。詳細については、キューとエクスチェンジのビルダー API を参照してください。

名前空間変更

接続ファクトリ

接続ファクトリ Bean 宣言に thread-factory を追加できるようになりました。たとえば、amqp-client ライブラリによって作成されたスレッドに名前を付けることができます。詳細については、接続とリソースの管理を参照してください。

CacheMode.CONNECTION を使用すると、許可される接続の総数を制限できるようになりました。詳細については、接続とリソースの管理を参照してください。

キュー定義

匿名キューの命名戦略を提供できるようになりました。詳細については、AnonymousQueue を参照してください。

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

アイドルメッセージリスナーの検出

アイドル時に ApplicationEvent インスタンスを発行するようにリスナーコンテナーを構成できるようになりました。詳細については、アイドル状態の非同期コンシューマーの検出を参照してください。

不一致キューの検出

既定では、リスナーコンテナーの開始時に、一致しないプロパティまたは引数を持つキューが検出された場合、コンテナーは例外をログに記録しますが、リッスンは続行します。コンテナーに mismatchedQueuesFatal というプロパティが追加され、起動時に問題が検出された場合にコンテナー (およびコンテキスト) が起動しないようになりました。また、接続障害からの回復後など、後で問題が検出された場合にもコンテナーを停止します。詳細については、メッセージリスナーコンテナーの設定を参照してください。

リスナーコンテナーのロギング

これで、リスナーコンテナーはその beanName を threadNamePrefix として内部 SimpleAsyncTaskExecutor に提供します。ログ分析に役立ちます。

デフォルトのエラーハンドラー

デフォルトのエラーハンドラー (ConditionalRejectingErrorHandler) は、回復不能な @RabbitListener 例外を致命的と見なすようになりました。詳細については、例外処理を参照してください。

AutoDeclare および RabbitAdmin インスタンス

アプリケーションコンテキストでの RabbitAdmin インスタンスの使用に関するオプションのセマンティクスの変更については、メッセージリスナーコンテナーの設定 (autoDeclare) を参照してください。

AmqpTemplate: タイムアウト受信

AmqpTemplate とその RabbitTemplate 実装のために、timeout を使用した新しい receive() メソッドが多数導入されました。詳細については、ポーリングコンシューマーを参照してください。

AsyncRabbitTemplate を使用する

新しい AsyncRabbitTemplate が導入されました。このテンプレートは、多くの send および receive メソッドを提供します。戻り値は ListenableFuture であり、後で同期的または非同期的に結果を取得するために使用できます。詳細については、非同期 Rabbit テンプレートを参照してください。

RabbitTemplate の変更

1.4.1 ブローカーがサポートしている場合、直接返信 (英語) を使用する機能が導入されました。応答ごとに一時キューを使用するよりも効率的です。このバージョンでは、useTemporaryReplyQueues プロパティを true に設定することで、このデフォルトの動作をオーバーライドし、一時キューを使用できます。詳細については、RabbitMQ 直接返信を参照してください。

RabbitTemplate は user-id-expression (Java 構成を使用する場合は userIdExpression ) をサポートするようになりました。詳細については、検証済みのユーザー ID RabbitMQ ドキュメント (英語) および検証済みのユーザー ID を参照してください。

メッセージプロパティ

CorrelationId を使用する

correlationId メッセージプロパティを String にすることができるようになりました。詳細については、メッセージプロパティコンバーターを参照してください。

長い文字列ヘッダー

以前は、DefaultMessagePropertiesConverter は長い文字列の制限 (デフォルトは 1024) よりも長いヘッダーを DataInputStream に「変換」していました (実際には、LongString インスタンスの DataInputStream を参照していました)。出力では、このヘッダーは変換されませんでした (たとえば、ストリームで toString() を呼び出すことによる java.io.DataInputStream@1d057a39 など)。

このリリースでは、長い LongString インスタンスがデフォルトで LongString インスタンスとして残されるようになりました。getBytes[]toString()、または getStream() メソッドを使用してコンテンツにアクセスできます。大きな受信 LongString も出力で正しく「変換」されるようになりました。

詳細については、メッセージプロパティコンバーターを参照してください。

受信配信モード

deliveryMode プロパティは MessageProperties.deliveryMode にマップされなくなりました。この変更により、同じ MessageProperties オブジェクトを使用して送信 メッセージを送信する場合に、意図しない伝播が回避されます。代わりに、受信 deliveryMode ヘッダーが MessageProperties.receivedDeliveryMode にマップされます。

詳細については、メッセージプロパティコンバーターを参照してください。

アノテーション付きエンドポイントを使用する場合、ヘッダーは AmqpHeaders.RECEIVED_DELIVERY_MODE という名前のヘッダーで提供されます。

詳細については、アノテーション付きエンドポイントメソッドシグネチャーを参照してください。

受信ユーザー ID

user_id プロパティは MessageProperties.userId にマップされなくなりました。この変更により、同じ MessageProperties オブジェクトを使用して送信 メッセージを送信する場合に、意図しない伝播が回避されます。代わりに、受信 userId ヘッダーが MessageProperties.receivedUserId にマップされます。

詳細については、メッセージプロパティコンバーターを参照してください。

アノテーション付きエンドポイントを使用すると、ヘッダーは AmqpHeaders.RECEIVED_USER_ID という名前のヘッダーで提供されます。

詳細については、アノテーション付きエンドポイントメソッドシグネチャーを参照してください。

RabbitAdmin の変更

宣言の失敗

以前は、ignoreDeclarationFailures フラグはチャネルの IOException に対してのみ有効でした (引数の不一致など)。すべての例外 ( TimeoutException など) に対して有効になりました。さらに、宣言が失敗するたびに DeclarationExceptionEvent が発行されるようになりました。RabbitAdmin の最終宣言イベントは、プロパティ lastDeclarationExceptionEvent としても利用できます。詳細については、ブローカーの構成を参照してください。

@RabbitListener の変更

各 Bean に複数のコンテナー

Java 8 以降を使用すると、複数の @RabbitListener アノテーションを @Bean クラスまたはそのメソッドに追加できるようになりました。Java 7 以前を使用する場合、@RabbitListeners コンテナーアノテーションを使用して同じ機能を提供できます。詳細については、@Repeatable@RabbitListener を参照してください。

@SendTo SpEL 式

 replyTo プロパティのないルーティング応答の @SendTo は、リクエスト / 応答に対して評価される SpEL 式にすることができるようになりました。詳細については、返信管理を参照してください。

@QueueBinding の改善

@QueueBinding アノテーションでキュー、エクスチェンジ、バインディングの引数を指定できるようになりました。ヘッダー交換が @QueueBinding でサポートされるようになりました。詳細については、アノテーション駆動型のリスナーエンドポイントを参照してください。

遅延メッセージ交換

Spring AMQP は、RabbitMQ Delayed Message Exchange プラグインを最高レベルでサポートするようになりました。詳細については、遅延メッセージ交換を参照してください。

取引所内部フラグ

Exchange 定義はすべて internal としてマークできるようになり、RabbitAdmin は交換を宣言するときに値をブローカーに渡します。詳細については、ブローカーの構成を参照してください。

CachingConnectionFactory の変更

CachingConnectionFactory キャッシュ統計

CachingConnectionFactory は、実行時および JMX 経由でキャッシュプロパティを提供するようになりました。詳細については、ランタイムキャッシュのプロパティを参照してください。

基礎となる RabbitMQ 接続ファクトリへのアクセス

基盤となるファクトリへのアクセスを提供するために、新しい getter が追加されました。たとえば、この getter を使用して、カスタム接続プロパティを追加できます。詳細については、カスタムクライアント接続プロパティの追加を参照してください。

チャンネルキャッシュ

デフォルトのチャネルキャッシュサイズが 1 から 25 に増加しました。詳細については、接続とリソースの管理を参照してください。

さらに、SimpleMessageListenerContainer は、少なくとも concurrentConsumers の数と同じ大きさになるようにキャッシュサイズを調整しなくなりました。コンテナーコンシューマーチャネルは決してキャッシュされないため、これは不必要でした。

RabbitConnectionFactoryBean を使用する

ファクトリ Bean は、結果のファクトリによって作成された接続にクライアント接続プロパティを追加するプロパティを公開するようになりました。

Java デシリアライゼーション

Java デシリアライゼーションを使用するときに、許可されるクラスの「許可リスト」を構成できるようになりました。信頼できないソースから直列化された java オブジェクトを含むメッセージを受け入れる場合は、許可リストの作成を検討する必要があります。詳細については、Java デシリアライゼーションを参照してください。

JSON MessageConverter

JSON メッセージコンバーターの改善により、メッセージヘッダーに型情報がないメッセージを使用できるようになりました。詳細については、アノテーション付きメソッドのメッセージ変換および [json- メッセージコンバーター ] を参照してください。

ロギングアペンダ

Log4j 2

log4j 2 アペンダーが追加され、ブローカークラスターに接続するために addresses プロパティを使用してアペンダーを構成できるようになりました。

クライアント接続プロパティ

カスタムクライアント接続プロパティを RabbitMQ 接続に追加できるようになりました。

詳細については、ロギングサブシステム AMQP アペンダを参照してください。