对于最新的稳定版本,请使用 Spring AMQP 3.2.6! |
修改消息 - 压缩等
存在许多扩展点。 它们允许您在消息发送到 RabbitMQ 之前或在收到消息后立即对消息执行一些处理。
正如在消息转换器中看到的那样,一个这样的扩展点位于AmqpTemplate
convertAndReceive
operations,您可以在其中提供MessagePostProcessor
.
例如,在转换 POJO 后,MessagePostProcessor
允许您在Message
.
从 1.4.2 版开始,在RabbitTemplate
- setBeforePublishPostProcessors()
和setAfterReceivePostProcessors()
.
第一个使后处理器能够在发送到 RabbitMQ 之前立即运行。
使用批处理(请参阅批处理)时,在组装批处理后和发送批处理之前调用此作。
第二个在收到消息后立即调用。
这些扩展点用于压缩等功能,为此,多个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
以允许将新的后处理器分别附加到 Before Publish 和 After Receive 后处理器的列表中。
此外,还提供了一些方法来删除后处理器。
同样地AbstractMessageListenerContainer
还有addAfterReceivePostProcessors()
和removeAfterReceivePostProcessor()
添加了方法。
请参阅 Java 文档RabbitTemplate
和AbstractMessageListenerContainer
了解更多详情。