文章目录
1、问题
需求:利用 Spring AMQP 发送对象类型消息
Spring AMQP对消息对象的处理事由 org.springframework.amqp.support.converter.MessageConverter
l来处理的,默认实现是 SimpleMessageConverter
,内部基于 JDK 自带的 ObjectOutputStream
完成序列化;存在一下问题:
- JDK序列化的消息体积变大
- JDK序列化的消息可读性差
- JDK序列化存在安全漏洞(字节码可变)
2、更合理的解决方案
建议采用 JSON 序列化代替默认的 JDK 序列化。需要做两件事:
- 在 publisher 和 consumer 中都要引入 jackson 依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
- 在 publisher 和 consumer 中都要配置 MessageConverter:
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
@Configuration
public class RabbitConfig {
@Bean MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
}
}
publisher 和 consumer 代码和之前一样,之于 consumer 的消息参数,publisher 发的什么类型的消息,consumer 就用什么类型接参数即可,代码不额外赘述。