最新の安定バージョンについては、Spring AMQP 3.2.5 を使用してください! |
メッセージの変更 - 圧縮など
多数の拡張ポイントが存在します。メッセージが RabbitMQ に送信される前、またはメッセージが受信された直後に、メッセージに対して何らかの処理を実行できます。
メッセージコンバーターに見られるように、そのような拡張ポイントの 1 つは AmqpTemplate
convertAndReceive
操作にあり、ここで MessagePostProcessor
を提供できます。例: POJO が変換された後、MessagePostProcessor
では Message
でカスタムヘッダーまたはプロパティを設定できます。
バージョン 1.4.2 以降、追加の拡張ポイントが RabbitTemplate
- setBeforePublishPostProcessors()
、setAfterReceivePostProcessors()
に追加されました。1 つ目は、RabbitMQ に送信する直前にポストプロセッサーを実行できるようにします。バッチ処理 ( バッチ処理を参照) を使用する場合、これは、バッチが組み立てられた後、バッチが送信される前に呼び出されます。2 つ目は、メッセージを受信した直後に呼び出されます。
これらの拡張ポイントは、圧縮などの機能に使用され、この目的のために、いくつかの MessagePostProcessor
実装が提供されています。GZipPostProcessor
、ZipPostProcessor
、DeflaterPostProcessor
は送信前にメッセージを圧縮し、GUnzipPostProcessor
、UnzipPostProcessor
、InflaterPostProcessor
は受信したメッセージを圧縮解除します。
バージョン 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 を参照してください。