修改消息 - 压缩等

存在许多扩展点。 它们允许您在消息发送到 RabbitMQ 之前或接收消息后立即对消息执行一些处理。spring-doc.cadn.net.cn

消息转换器 中可以看到,一个这样的扩展点位于AmqpTemplate convertAndReceive作中,您可以在其中提供MessagePostProcessor. 例如,在 POJO 转换后,MessagePostProcessor允许您在Message.spring-doc.cadn.net.cn

从版本 1.4.2 开始,额外的扩展点已添加到RabbitTemplate - setBeforePublishPostProcessors()setAfterReceivePostProcessors(). 第一个选项使后处理器能够在发送到 RabbitMQ 之前立即运行。 使用批处理时(请参阅 批处理),在组装批处理之后和发送批处理之前调用此函数。 第二个请求在收到消息后立即调用。spring-doc.cadn.net.cn

这些扩展点用于压缩等功能,为此,还用于多个MessagePostProcessor提供了 implementations。GZipPostProcessor,ZipPostProcessorDeflaterPostProcessor在发送之前压缩消息,以及GUnzipPostProcessor,UnzipPostProcessorInflaterPostProcessor解压缩收到的消息。spring-doc.cadn.net.cn

从版本 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()方法,让在容器收到消息后执行解压缩。spring-doc.cadn.net.cn

从版本 2.1.4 开始,addBeforePublishPostProcessors()addAfterReceivePostProcessors()已添加到RabbitTemplate允许将新的后处理器分别附加到 Before Publish 和 After Receive 后处理器的列表中。 此外,还提供了一些方法来删除后处理器。 同样地AbstractMessageListenerContainer还有addAfterReceivePostProcessors()removeAfterReceivePostProcessor()方法。 请参阅 JavadocRabbitTemplateAbstractMessageListenerContainer了解更多详情。spring-doc.cadn.net.cn