对于最新的稳定版本,请使用 Spring AMQP 3.2.6spring-doc.cadn.net.cn

修改消息 - 压缩等

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

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

从 1.4.2 版开始,在RabbitTemplate - setBeforePublishPostProcessors()setAfterReceivePostProcessors(). 第一个使后处理器能够在发送到 RabbitMQ 之前立即运行。 使用批处理(请参阅批处理)时,在组装批处理后和发送批处理之前调用此作。 第二个在收到消息后立即调用。spring-doc.cadn.net.cn

这些扩展点用于压缩等功能,为此,多个MessagePostProcessor提供了实现。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压缩器上的属性设置为:. 当您的消费者升级到 2.2.11 或更高版本时,您可以恢复为默认值 ', '。

同样,SimpleMessageListenerContainer还有一个setAfterReceivePostProcessors()方法,让容器收到消息后执行解压缩。spring-doc.cadn.net.cn

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