声明:本站文章均为作者个人原创,图片均为实际截图。如有需要请收藏网站,禁止转载,谢谢配合!!!

  • 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();
}