修改消息 - 压缩等
存在许多扩展点。 它们允许您在消息发送到 RabbitMQ 之前或接收消息后立即对消息执行一些处理。
从 消息转换器 中可以看到,一个这样的扩展点位于AmqpTemplate
convertAndReceive
作中,您可以在其中提供MessagePostProcessor
.
例如,在 POJO 转换后,MessagePostProcessor
允许您在Message
.
从版本 1.4.2 开始,额外的扩展点已添加到RabbitTemplate
- setBeforePublishPostProcessors()
和setAfterReceivePostProcessors()
.
第一个选项使后处理器能够在发送到 RabbitMQ 之前立即运行。
使用批处理时(请参阅 批处理),在组装批处理之后和发送批处理之前调用此函数。
第二个请求在收到消息后立即调用。
这些扩展点用于压缩等功能,为此,还用于多个MessagePostProcessor
提供了 implementations。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 将 Compressor 上的 property 设置为: .
当您的使用者升级到 2.2.11 或更高版本时,您可以恢复为默认值 ', '。 |
同样,SimpleMessageListenerContainer
还有一个setAfterReceivePostProcessors()
方法,让在容器收到消息后执行解压缩。
从版本 2.1.4 开始,addBeforePublishPostProcessors()
和addAfterReceivePostProcessors()
已添加到RabbitTemplate
允许将新的后处理器分别附加到 Before Publish 和 After Receive 后处理器的列表中。
此外,还提供了一些方法来删除后处理器。
同样地AbstractMessageListenerContainer
还有addAfterReceivePostProcessors()
和removeAfterReceivePostProcessor()
方法。
请参阅 JavadocRabbitTemplate
和AbstractMessageListenerContainer
了解更多详情。