1.RabbitMQ (一)同步通讯和异步通讯2.RabbitMQ (二)基本结构和消息模型3.MQ和RabbitMQ
4.RabbitMQ (三)SpringAMQP消息转换器
5.RabbitMQ (四)SpringAMQP五种消息类型(Basic Queue)6.RabbitMQ (五)SpringAMQP五种消息类型(Work Queue)7.RabbitMQ (六)SpringAMQP五种消息类型(发布订阅模式和Fanout Exchange )8.RabbitMQ (七)SpringAMQP五种消息类型(Direct Exchange)9.RabbitMQ (八)SpringAMQP五种消息类型(Topic Exchange)一、消息转换器
Spring会把你发送的消息序列化为字节发送给MQ,接收消息的时候,还会把字节反序列化为Java对象。
只不过,默认情况下Spring采用的序列化方式是JDK序列化。众所周知,JDK序列化存在下列问题:
- 数据体积过大
- 有安全漏洞
- 可读性差
JDK序列化方式并不合适。我们希望消息体的体积更小、可读性更高,因此可以使用JSON方式来做序列化和反序列化。
二、实现JSON消息转换器
spring 的对消息对象的处理是由org.springframework.amqp.support.converter.MessageConverter来处理的.而默认实现是SimpleMeaasgeConverter,基于JDK的ObjectOutputStream完成序列化。
如果要修改只需要定义一个MessageConverter类型的Bean即可.推荐使用JSON方式序列化,步骤如下:
步骤一:
我们在publisher服务和consumer服务的父工程引入依赖:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
步骤二:
我们在publisher服务声明MessageConverter:
@Bean public MessageConverter essageConverter(){ return new Jackson2JsonMessageConverter(); }
步骤三:
我们在consumer服务定义MessageConverter
@Bean public MessageConverter jsonMessageConverter(){ return new Jackson2JsonMessageConverter(); }
步骤四:
定义生产者,向object.queue队列发送消息
@Test public void testSendObjectQueue() { Map<String, Object> map = new HashMap<>(); map.put("name","张三"); map.put("age",21); // 发送消息 rabbitTemplate.convertAndSend( "object.queue", map); }
步骤五:
然后定义一个消费者,监听object.queue队列并消费信息:
@RabbitListener(queues = "object.queue") public void listenObjectQueue(Map<String,Object> msg){ System.out.println("接收到object.queue的消息:" + msg); }
注意:发送方与接收方必须使用相同的MessageConverter。
运行测试:
发送消息后查看控制台:
数据格式为:content_type:application/json
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)