修改消息 - 压缩及其他

存在多个扩展点。它们允许您在消息发送至 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 实现。 GZipPostProcessorZipPostProcessorDeflaterPostProcessor 在发送前对消息进行压缩,而 GUnzipPostProcessorUnzipPostProcessorInflaterPostProcessor 则对收到的消息进行解压缩。spring-doc.cadn.net.cn

从版本 2.1.5 开始,可以使用 copyProperties = true 选项将 GZipPostProcessor 配置为复制原始消息属性的副本。默认情况下,出于性能考虑,这些属性会被复用,并通过压缩内容编码及可选的 MessageProperties.SPRING_AUTO_DECOMPRESS 头部进行修改。如果您保留了原始出站消息的引用,其属性也会随之发生变化。因此,如果您的应用程序保留了包含这些消息后处理器的出站消息副本,请考虑启用 copyProperties 选项。
从版本 2.2.12 开始,您可以配置压缩后处理器在内容编码元素之间使用的分隔符。

spring-doc.cadn.net.cn

在 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 设置为压缩器(s)上的 : 属性。spring-doc.cadn.net.cn

当您的消费者升级到 2.2.11 或更高版本时,您可以恢复默认的 `, `。spring-doc.cadn.net.cn

同样,SimpleMessageListenerContainer 也具有一个 setAfterReceivePostProcessors() 方法,使得解压缩操作在消息被容器接收后执行。spring-doc.cadn.net.cn

从版本 2.1.4 开始,addBeforePublishPostProcessors()addAfterReceivePostProcessors() 已被添加到 RabbitTemplate 中,以允许分别向“发布前”和“接收后”的后处理器列表中追加新的后处理器。此外,还提供了用于移除后处理器的方法。同样地,AbstractMessageListenerContainer 也新增了 addAfterReceivePostProcessors()removeAfterReceivePostProcessor() 方法。有关更多详情,请参阅 RabbitTemplateAbstractMessageListenerContainer 的 Javadoc 文档。spring-doc.cadn.net.cn