博客 基于SpringBoot+RabbitMQ完成应⽤通信

基于SpringBoot+RabbitMQ完成应⽤通信

   蓝袋鼠   发表于 2024-12-03 17:52  190  0

前言:
经过上面俩章学习,我们已经知道Rabbit的使用方式
RabbitMQ 七种工作模式介绍_rabbitmq 工作模式-CSDN博客

RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)-CSDN博客
作为⼀个消息队列,RabbitMQ也可以⽤作应⽤程序之间的通信.上述代码⽣产者和消费者代码放在不同的应⽤中即可完成不同应⽤程序的通信.

接下来我们来看,基于SpringBoot+RabbitMQ完成应⽤间的通信.
需求描述:
⽤⼾下单成功之后,通知物流系统,进⾏发货.(只讲应⽤通信,不做具体功能实现)

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/eb64716be4190dc6314c420a39e2ae52..png

一.创建项目 

为⽅便演示,把两个项⽬放在⼀个项⽬中

1)1. 创建⼀个空的项⽬rabbitmq-communication(其实就是⼀个空的⽂件夹)

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/8849ed48541fd8c05f72aaab79342224..png

2) 在这个项⽬⾥,创建Module

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/a6a901e8fa670df1b106bb02c10dfb59..png

3)后续流程和创建SpringBoot项⽬⼀样 

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/6044bb6d8f7d5c1bd2d4d64a28eaf351..png

 4)若发现识别不到java类文件

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/d3ab095223c3ea8bf1b0bb3f7bf59334..png

只需右击改项目文件,点进对应选项,修改成Maven即可

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/0edfea5766e00b71d0ab2b83adbeb1fb..png

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/6ff4344288727d7560aef1365ec37f68..png

二.订单系统(⽣产者) 

1)配置相应文件 

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/2c5998b824255efdd6ca7aa03d584f4b..png

2) 声明队列

package com.bite.order.config;

import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitmqConfig {
@Bean("orderQueue")
public Queue orderQueue() {
return QueueBuilder.durable("order.create").build();
}
}

3) 编写下单接⼝,下单成功之后,发送订单消息

package com.bite.order.controller;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;

@RequestMapping("/order")
@RestController
public class OrderController {
@Autowired
private RabbitTemplate rabbitTemplate;
@RequestMapping("/create")
public String create() {
//省略相关操作 例如校验参数 相关数据库操作
//主要测试代码是否最后成功发送即可
String orderId = UUID.randomUUID().toString();
rabbitTemplate.convertAndSend("","order.create","下单成功, 订单 ID:"+orderId);
return "下单成功!";
}
}

4) 启动订单系统(生产者,观察结果)

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/2133e3fb3ed4f5f55b5ef5cda72ca900..png

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/8f68feb6b51d008fa82c932fca2cfd41..png

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/1ef7d1135b43a6d3bf7ce266a1e22d19..png

三.物流系统(消费者)

 1)配置相应文件 

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/0513ebb8c6d75529d78010350dd6b196..png

8080端⼝已经被订单系统占⽤了,修改物流系统的端⼝号为9090

 2)监听队列

package com.bite.logistics.listener;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class OrderListener {
@RabbitListener(queues = "order.create")
public void handleMessage(String message) {
System.out.println("接收订单信息:"+message);
}
}

结果: 

接收到消息:下单成功, 订单ID:a4c1dbdc-688d-430a-ac16-bca713f85940
接收到消息:下单成功, 订单ID:5d190f19-7a8c-4866-b6e7-2b2bbe79412d

四.发送消息格式为对象 

定义一个对象

import lombok.Data;
@Data
public class OrderInfo {
private String orderId;
private String name;
}

生产者:

@RequestMapping("/create2")
public String create2() {
//省略相关操作 例如校验参数 相关数据库操作
//主要测试代码是否最后成功发送即可
OrderInfo orderInfo = new OrderInfo();
orderInfo.setOrderId(UUID.randomUUID().toString());
orderInfo.setName("商品:"+new Random().nextInt(100));
rabbitTemplate.convertAndSend("","order.create",orderInfo);
return "下单成功!";
}

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/d383fc1e81deb7bd89b50c898b67e643..png

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/82cea40cf9b0f4b5d1fe60da203124c9..png

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/187efff7d6cc9ceba3c0ac3702b1f024..png

此时为乱码,因此需要序列化

SpringAMQP提供了 Jackson2JsonMessageConverter 和
MappingJackson2MessageConverter 等转换器,我们需要把⼀个 MessageConverter 设置到 RabbitTemplate 中.

在config包里面添加 

@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
template.setMessageConverter(jackson2JsonMessageConverter()); // 设置消息转换器
return template;
}

private Jackson2JsonMessageConverter jackson2JsonMessageConverter() {
return new Jackson2JsonMessageConverter();
}

消费者: 

@RabbitListener(queues = "order.create")
public void handleMessage2(OrderInfo orderInfo) {
System.out.println("接收订单信息OrderInfo :"+orderInfo);
}

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user9/article/bc449d7affb29054350e47b920a17dbd..png

结语: 写博客不仅仅是为了分享学习经历,同时这也有利于我巩固知识点,总结该知识点,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进。同时也希望读者们不吝啬你们的点赞+收藏+关注,你们的鼓励是我创作的最大动力!  

https://blog.csdn.net/chaodddddd/article/details/143806127

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

《数据资产管理白皮书》下载地址:

《行业指标体系白皮书》下载地址:

《数据治理行业实践白皮书》下载地址:

《数栈V6.0产品白皮书》下载地址:

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:

0条评论
上一篇:Yarn调度器日志
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群