SpringBoot 整合 RabbitMQ 修改序列化方式
Estimated reading time: 4 minutes1. 添加maven依赖
我们可以搭建一个springboot的maven聚合工程,其中两个module,一个作为mq的生产者,一个作为mq的消费者。
除了其他基本依赖歪还需要以下 spring-boot-starter-amq依赖。
2. 在项目中添加RabbitMQ相关配置
application.yml文件中添加如下配置
我发现,springboot 集成RabbitMQ 的时候使用的默认的序列化方式 org.springframework.amqp.support.converter.SimpleMessageConverter 这个转换器在序列化和反序列化时,严格要求对象属性,类型,包路径严格一致,才能反序列化成功。
假设我们这里使用RabbitMQ发送消息,发送一个实体类对象。那么我们在两个maven工程中都编写一个类名,属性相同的实体类传递消息时,会导致RabbitMQ消费消息失败。
要想解决这个情况想到有两种办法:
- 可以将实体类定义到公共的工程中形成一个maven jar,生产者和消费者共同引入该 jar。
- 我们通过修改springboot项目中 RabbitMQ 的序列化方式,改为
Jackson2JsonMessageConverter()的方式。
我们这里使用第二个方案进行配置。
首先是生产者使用RabbitTemplate 发送消息,所以添加配置类如下:
消费者也需要使用相同的序列化方式,通过实现 RabbitListenerConfigurer 接口实现 configureRabbitListeners(RabbitListenerEndpointRegistrar rabbitListenerEndpointRegistrar) 方式 ,设置MappingJackson2MessageConverter() 。
