一文带你了解RabbitMQ消息转换器
作者:小威要向诸佬学习呀 时间:2023-11-15 23:22:28
在SpringAMQP的发送方法中,接收消息的类型是Object,也就是说我们可以发送任意对象类型的消息,SpringAMQP会帮我们序列化为字节后发送。
我们以实际例子来做一个演示,首先在项目中的FanoutConfig配置类声明一个新的队列:
package cn.itcast.mq.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FanoutConfig {
@Bean
public Queue objectQueue(){
return new Queue("object.queue");
}
}
接着我们在生产者模块中编写发送消息的测试代码:
package cn.itcast.mq.spring;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.HashMap;
import java.util.Map;
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringAmqpTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testSendObjectQueue(){
Map<String,Object> msg =new HashMap<>();//创建一个map集合
msg.put("name","小威");
msg.put("age",21);
rabbitTemplate.convertAndSend("object.queue",msg);//发送消息
}
}
消息发送代码编写完成后,重启项目,打开RabbitMQ的虚拟机对应地址可以看到我们编写的name和age出现了特殊的情况:
这是因为RabbitMQ只支持字节的序列化方式,spring支持发送object对象消息,由上图可以看到content_type的转化方式,spring将封装的map对象序列化了一长串字符串。
那么我们该如何解决这个问题呢?
首先,Spring的消息对象的处理是由org.springframework.amqp.support.converter.MessageConverter来处理的。默认实现是SimpleMessageConverter,基于JDK的ObjectOutputStream完成序列化。
因此,我们需要定义一个MessageConverter 类型的Bean,可以使用json的方式序列化,在父工程中引入json的依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
然后在生产者模块的启动类中声明bean:
package cn.itcast.mq;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.Jackson2XmlMessageConverter;
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 jsonMessageConverter(){
return new Jackson2JsonMessageConverter();
}
}
再次重启生产者模块可以看到我们想要的消息对象结果了:
对于消费者也同理,首选引入依赖,接着在启动类中编写和生产者一样的代码,最后定义一个消费者监听该队列:
@RabbitListener(queues = "object.queue")
public void listenObjectQueue(Map<String,Object> msg){
System.out.println("接受到object.queue的消息:"+msg);
}
启动消费者模块可以看到控制台输出的结果:
来源:https://juejin.cn/post/7216942649068453945
标签:RabbitMQ,消息,转换
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java SpringMVC异步处理详解
2021-08-10 15:03:58
![](https://img.aspxhome.com/file/2023/0/62050_0s.png)
Android编程实现XML解析与保存的三种方法详解
2022-04-15 00:39:01
![](https://img.aspxhome.com/file/2023/5/125365_0s.png)
C# DataTable与Model互转的示例代码
2022-02-07 19:37:44
Android集成腾讯X5实现文档浏览功能
2023-10-03 23:44:06
![](https://img.aspxhome.com/file/2023/5/86015_0s.png)
Android人脸识别Demo竖屏YUV方向调整和图片保存(分享)
2022-11-24 00:47:42
![](https://img.aspxhome.com/file/2023/7/138517_0s.jpg)
Spring5源码解析之Spring中的异步和计划任务
2022-09-06 02:14:04
Android TextView显示Html类解析的网页和图片及自定义标签用法示例
2023-06-12 04:39:41
在 Visual Studio 中查看反汇编代码
2023-05-30 20:09:50
![](https://img.aspxhome.com/file/2023/6/116616_0s.png)
java 二分法算法的实例
2023-04-25 05:04:05
jdbc+jsp实现简单员工管理系统
2021-08-31 23:08:15
C#实现合并多张图片为GIF动态图
2022-12-13 04:16:35
![](https://img.aspxhome.com/file/2023/2/106462_0s.png)
IDEA2020.1个性化设置的实现
2023-10-17 09:31:34
![](https://img.aspxhome.com/file/2023/5/85505_0s.jpg)
Thread类interrupt interrupted及isInterrupted区别
2023-07-20 06:52:20
![](https://img.aspxhome.com/file/2023/8/57688_0s.png)
网易Java程序员两轮面试 请问你能答对几个?
2023-11-29 10:32:08
Spring中@Validated和@Valid区别浅析
2021-10-04 23:27:22
Android性能优化之RecyclerView分页加载组件功能详解
2023-06-04 16:24:14
![](https://img.aspxhome.com/file/2023/7/94947_0s.jpg)
使用SpringBoot整合ssm项目的实例详解
2023-09-29 16:34:43
![](https://img.aspxhome.com/file/2023/1/101991_0s.png)
Java线程状态运行原理解析
2023-02-27 05:13:24
![](https://img.aspxhome.com/file/2023/0/78360_0s.jpg)
Mybatis-Plus环境配置与入门案例分析
2022-02-05 01:15:01
![](https://img.aspxhome.com/file/2023/5/85515_0s.png)
java验证电话号码的方法
2023-04-01 21:44:41