修改消息 - 压缩及更多功能
存在许多扩展点。它们允许您对消息执行一些处理,无论是在发送到 RabbitMQ 之前还是在接收到之后立即进行。
正如 消息转换器 中所示,其中一个扩展点是 AmqpTemplate
的 convertAndReceive
操作,您可以在其中提供一个 MessagePostProcessor
。例如,在您的 POJO 转换后,MessagePostProcessor
允许您在 Message
上设置自定义头或属性。
从版本 1.4.2 开始,RabbitTemplate
中添加了额外的扩展点 - setBeforePublishPostProcessors()
和 setAfterReceivePostProcessors()
。第一个允许一个后处理器在发送到 RabbitMQ 之前立即运行。当使用批处理(参见 批处理)时,这在批处理组装后和批处理发送前被调用。第二个在消息接收后立即调用。
这些扩展点用于诸如压缩之类的功能,为此目的,提供了几种 MessagePostProcessor
实现。GZipPostProcessor
、ZipPostProcessor
和 DeflaterPostProcessor
在发送前压缩消息,而 GUnzipPostProcessor
、UnzipPostProcessor
和 InflaterPostProcessor
解压缩接收到的消息。
从版本 2.1.5 开始, |
从版本 2.2.12 开始,您可以配置压缩后处理器在内容编码元素之间使用的分隔符。在 2.2.11 及更早版本中,这被硬编码为 :
,现在默认设置为 , `。解压缩器将同时支持这两种分隔符。但是,如果您使用 2.3 或更高版本发布消息并使用 2.2.11 或更早版本消费,则必须将压缩器上的 `encodingDelimiter
属性设置为 :
。当您的消费者升级到 2.2.11 或更高版本时,您可以恢复为默认的 `, `。
类似地,SimpleMessageListenerContainer
也有一个 setAfterReceivePostProcessors()
方法,允许在容器接收到消息后执行解压缩。
从版本 2.1.4 开始,addBeforePublishPostProcessors()
和 addAfterReceivePostProcessors()
已添加到 RabbitTemplate
中,以允许分别将新的后处理器附加到发布前和接收后后处理器的列表中。还提供了删除后处理器的方法。类似地,AbstractMessageListenerContainer
也添加了 addAfterReceivePostProcessors()
和 removeAfterReceivePostProcessor()
方法。有关更多详细信息,请参阅 RabbitTemplate
和 AbstractMessageListenerContainer
的 Javadoc。