Modifying Messages - Compression and More
存在一些扩展点。它们允许您在消息发送到 RabbitMQ 之前或接收后立即对消息执行某些处理。
如 Message Converters中所示,一个这样的扩展点在 AmqpTemplate``convertAndReceive`操作中,你可以在其中提供 `MessagePostProcessor
。例如,在你的 POJO 转换后,`MessagePostProcessor`允许你在 `Message`上设置自定义头或属性。
从 1.4.2 版开始,已向 RabbitTemplate
- setBeforePublishPostProcessors()
和 setAfterReceivePostProcessors()
添加了其他扩展点。第一个使后处理器能够在发送至 RabbitMQ 之前立即运行。在使用批处理时(请参阅 Batching),这会在组装批处理之后并且在发送批处理之前被调用。第二个在收到消息后立即被调用。
这些扩展点用于诸如压缩之类的功能,为此提供了几个 MessagePostProcessor
实现。GZipPostProcessor
、ZipPostProcessor
和 DeflaterPostProcessor
在发送之前压缩消息,而 GUnzipPostProcessor
、UnzipPostProcessor
和 InflaterPostProcessor
解压缩收到的消息。
从 2.1.5 版开始, |
从 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。