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

メッセージの変更 - 圧縮など

多数の拡張ポイントが存在します。メッセージが RabbitMQ に送信される前、またはメッセージが受信された直後に、メッセージに対して何らかの処理を実行できます。

メッセージコンバーターに見られるように、そのような拡張ポイントの 1 つは AmqpTemplate convertAndReceive 操作にあり、ここで MessagePostProcessor を提供できます。例: POJO が変換された後、MessagePostProcessor では Message でカスタムヘッダーまたはプロパティを設定できます。

バージョン 1.4.2 以降、追加の拡張ポイントが RabbitTemplate - setBeforePublishPostProcessors()setAfterReceivePostProcessors() に追加されました。1 つ目は、RabbitMQ に送信する直前にポストプロセッサーを実行できるようにします。バッチ処理 ( バッチ処理を参照) を使用する場合、これは、バッチが組み立てられた後、バッチが送信される前に呼び出されます。2 つ目は、メッセージを受信した直後に呼び出されます。

これらの拡張ポイントは、圧縮などの機能に使用され、この目的のために、いくつかの MessagePostProcessor 実装が提供されています。GZipPostProcessorZipPostProcessorDeflaterPostProcessor は送信前にメッセージを圧縮し、GUnzipPostProcessorUnzipPostProcessorInflaterPostProcessor は受信したメッセージを圧縮解除します。

バージョン 2.1.5 以降、GZipPostProcessor を copyProperties = true オプションで構成して、元のメッセージプロパティのコピーを作成できます。デフォルトでは、これらのプロパティはパフォーマンス上の理由から再利用され、圧縮コンテンツエンコーディングとオプションの MessageProperties.SPRING_AUTO_DECOMPRESS ヘッダーで変更されます。元の送信メッセージへの参照を保持すると、そのプロパティも変更されます。アプリケーションがこれらのメッセージポストプロセッサーを使用して送信メッセージのコピーを保持する場合は、copyProperties オプションをオンにすることを検討してください。
バージョン 2.2.12 以降では、圧縮ポストプロセッサーがコンテンツエンコーディング要素間で使用する区切り文字を構成できます。2.2.11 以前のバージョンでは、これは : としてハードコードされていましたが、現在はコンプレッサーの , ` by default. The decompressors will work with both delimiters. However, if you publish messages with 2.3 or later and consume with 2.2.11 or earlier, you MUST set the `encodingDelimiter プロパティに : に設定されています。コンシューマーが 2.2.11 以降にアップグレードされたら、デフォルトの `, ` に戻すことができます。

同様に、SimpleMessageListenerContainer にも setAfterReceivePostProcessors() メソッドがあり、コンテナーがメッセージを受信した後に解凍を実行できます。

バージョン 2.1.4 から、addBeforePublishPostProcessors() および addAfterReceivePostProcessors() が RabbitTemplate に追加され、新しいポストプロセッサーを発行前および受信後のポストプロセッサーのリストにそれぞれ追加できるようになりました。また、ポストプロセッサーを削除する方法も提供されています。同様に、AbstractMessageListenerContainer にも addAfterReceivePostProcessors() および removeAfterReceivePostProcessor() メソッドが追加されています。詳細については、RabbitTemplate および AbstractMessageListenerContainer の Javadoc を参照してください。