RabbitMQ传送-接收对象
RabbitMQ传送-接收对象
- JSON字符串发送-接收对象
- 对象序列化发送-接收对象
一、消息提供者发送消息
- 创建项目producer
引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<scope>test</scope>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
- application.yml配置文件
server:
port: 9002
spring:
application:
name: consumer
#配置rabbitmq
rabbitmq:
host: 你的ip地址
port: 5672
virtual-host: host1
username: zhangsan
password: 123
- goods实体类、goods-add.html、GoodsController.java
Goods.java
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Goods implements Serializable {
private Integer id;
private String name;
private Float price;
private String desc;
}
goods-add.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>商品添加</title>
</head>
<body>
<h3>商品添加</h3>
<!-- 注意,form表单的name属性,要与实体类中的属性一致 -->
<form action="../goods/add" method="post">
<p>商品ID:<input type="number" name="id" value=""></p>
<p>商品Name:<input type="text" name="name" value=""></p>
<p>商品Price:<input type="text" name="price" value=""></p>
<p>商品Desc:<input type="text" name="desc" value=""></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>
GoodsController.java
@Controller
@RequestMapping("/goods")
public class GoodsController {
@Autowired
private MQService mqService;
@RequestMapping("/add")
public String add(Goods goods) throws JsonProcessingException {
System.out.println("向queue1队列加入了消息对象===>" goods);
//完成了商品添加操作
//将商品对象通过消息队列传递给consumer
mqService.sendMsg(goods);
//再返回到添加商品页面
return "goods-add";
}
}
MQService.java
发送对象有两种方式实现:
-
对象序列化实现(需对实体类实现序列化)
@Service /** * 消息队列只可以发送字符串、字节数组、序列号对象 */ public class MQService { @Autowired private AmqpTemplate amqpTemplate; public void sendMsg(Goods goods) throws JsonProcessingException { //1.直接传序列化的对象 amqpTemplate.convertAndSend("","queue1", message); //2.转换为字节数组传送 //byte[] bytes = SerializationUtils.serialize(goods); //amqpTemplate.convertAndSend("","queue1", bytes); } }
-
JSON字符串实现
@Service /** * 消息队列只可以发送字符串、字节数组、序列号对象 */ public class MQService { @Autowired private AmqpTemplate amqpTemplate; public void sendMsg(Goods goods) throws JsonProcessingException { //JSON字符串实现 //ObjectMapper:将对象内容转化为json对象使用 //把goods对象转换位json然后发送到queue1队列 ObjectMapper mapper = new ObjectMapper(); String message = mapper.writeValueAsString(goods); } }
- 此时运行消息提供者项目,发送消息到消息队列。
http://localhost:9001/goods/add //填写表单信息,即为对象赋值
然后发送。
二、消息消费者接收消息
- 创建项目consumer
- 配置文件application.yml
server:
port: 9002
spring:
application:
name: consumer
#配置rabbitmq
rabbitmq:
host: 你的ip
port: 5672
virtual-host: host1
username: zhangsan
password: 123
- 实体类、消息接收者类
实体类:Goods.java
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Goods implements Serializable {
private Integer id;
private String name;
private Float price;
private String desc;
}
ReceiveService.java
接收对象也对应有两种方式实现:
-
对象序列化接收(需对实体类实现序列化)
@Service @RabbitListener(queues = "queue1") public class ReviceMsgService { @RabbitHandler public void receiveMsg(byte[] good) { Goods goods = (Goods) SerializationUtils.deserialize(good); System.out.println(goods); } }
-
JSON字符串接收
@Service @RabbitListener(queues = "queue1") public class ReviceMsgService { @RabbitHandler public void receiveMsg(String msg) throws JsonProcessingException { //JSON字符串接收 //mapper.readValue:将序列化对象内容转为Goods对象 //把goods对象转换位json然后发送到queue1队列 ObjectMapper mapper = new ObjectMapper(); Goods goods = mapper.readValue(msg, Goods.class); System.out.println(goods); } }
- 此时运行consumer项目,即可实时接收队列中的对象信息。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggjhae
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13