- Spring会把发送的消息序列化为字节发送给MQ,接收消息的时候,还会把字节反序列化为Java对象。
- Spring的对消息对象的处理是由org.springframework.amqp.support.converter.MessageConverter来处理的。而默认使用SimpleMessageConverter消息转换器,基于JDK的ObjectOutputStream完成序列化。
- 设置消息转换器,只需要定义一个MessageConverter 类型的Bean即可。推荐用JSON方式序列化
1.发送对象
@Test
public void testSendObjectQueue(){
Map<String, Object> msg = new HashMap<>();
msg.put("name", "badianboke");
msg.put("slogan", "666");
rabbitTemplate.convertAndSend("object.queue", msg);
}
查看消息是序列化后的
2.发送方引入jackson-databind依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.7</version>
</dependency>
3.发送方消息转换
package cn.badianboke.mq;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class PublisherApplication {
public static void main(String[] args) {
SpringApplication.run(PublisherApplication.class);
}
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
4.接收方法
@RabbitListener(queues = "object.queue")
public void testSendObjectQueue(Map<String, Object> msg){
System.out.println(msg)
}
查看消息是序列化后的
5.接收引入jackson-databind依赖
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.10</version>
</dependency>
6.接收消息转换
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}