|
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring AMQP 3.2.0! |
修改消息 - 压缩等
存在许多扩展点。 它们允许您在消息发送到 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了解更多详情。