使用 Spring Cloud Stream RabbitMQ,是否可以压缩出站消息和解压缩入站消息

With Spring Cloud Stream RabbitMQ, is it possible to zip outbound and unzip inbound message

使用 Spring Cloud Stream RabbitMQ 应用程序,我试图通过定义我自己的 RabbitTemplate bean 在发送之前压缩 (zip) 消息,但它不起作用。

有没有办法通过配置 (application.properties) 或其他方法做到这一点?

活页夹配置自动在发送端连接 GZipPostProcessor 并在消费者端连接 DelegatingDecompressingPostProcessor

如果要将其更改为 ZipPostProcessor,请使用活页夹自定义程序在活页夹上进行设置:

/**
 * Set a {@link org.springframework.amqp.core.MessagePostProcessor} to compress
 * messages. Defaults to a
 * {@link org.springframework.amqp.support.postprocessor.GZipPostProcessor}.
 * @param compressingPostProcessor the post processor.
 */
public void setCompressingPostProcessor(
        MessagePostProcessor compressingPostProcessor) {

您必须将生产者绑定 属性 compress 设置为 true 以在发送方启用压缩。

在接收方,DelegatingDecompressingPostProcessor 查看内容编码消息 属性 以确定是否需要解压缩以及使用哪个解压缩器。

编辑

我刚刚注意到活页夹将压缩级别设置为 0 (NO_COMPRESSION)。使用 spring.cloud.stream.rabbit.binder.compression-level=9 (BEST_COMPRESSION) 或 spring.cloud.stream.rabbit.binder.compression-level=1 (BEST_SPEED).

有关可用级别,请参阅 java.util.zip.Deflater

https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit/issues/353

这仅适用于使用 gzip 的情况。