このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring AMQP 3.2.5 を使用してください! |
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 オブジェクトを含むメッセージを受け入れる場合は、許可リストの作成を検討する必要があります。詳細については、amqp/message-converters.adoc#java-deserialization[Java デシリアライゼーション ] を参照してください。
JSON MessageConverter
JSON メッセージコンバーターの改善により、メッセージヘッダーに型情報がないメッセージを使用できるようになりました。詳細については、アノテーション付きメソッドのメッセージ変換および Jackson2JsonMessageConverter
を参照してください。