当前位置: 代码网 > it编程>编程语言>Java > 微服务基础篇:MQ(MessageQueue)消息队列(同步异步通讯,RabbitMQ快速入门,SpringAMQP,简单队列模型,工作队列模型,发布订阅模型,消息转换器)

微服务基础篇:MQ(MessageQueue)消息队列(同步异步通讯,RabbitMQ快速入门,SpringAMQP,简单队列模型,工作队列模型,发布订阅模型,消息转换器)

2024年07月28日 Java 我要评论
说明:在SpringAMQP的发送方法中,接收消息的类型是Object,也就是说我们可以发送任意对象类型的消息,SpringAMQP会帮我们序列化为字节后发送。同步通讯是指通信双方在进行数据交流时,必须按照一定的顺序同步进行,数据的发送方必须等待接收方对前一条数据的接收和处理完成后,才能发送下一条数据,确保数据的。2.在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2。3.在consumer服务中编写消费逻辑,监听simple.queue这个队列。

1.初识mq

1.同步通讯

1.同步调用存在的问题

2.优点

2.异步通讯

在这里插入图片描述

1.事件驱动优势

2.异步通信的缺点

3.mq常见框架

在这里插入图片描述

2.rabbitmq快速入门

官方网址:

https://www.rabbitmq.com/

1.单机部署

在centos7虚拟机中使用docker来安装:
1.在线拉取:

docker pull rabbitmq:3-management

2.本地导入:
在这里插入图片描述

docker load -i mq.tar

在这里插入图片描述
3.执行下面的命令来运行mq容器:

docker run \
 -e rabbitmq_default_user=root \
 -e rabbitmq_default_pass=123456 \
 --name mq \
 --hostname mq1 \
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:3-management

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.常见消息模型

消息发送流程:

消息接收流程:

3.springamqp

官方地址:https://spring.io/projects/spring-amqp

1.basic queue简单队列模型

1.在父工程中引入spring-amqp的依赖
在这里插入图片描述

2.在publisher服务中利用rabbittemplate发送消息到simple.queue这个队列
在这里插入图片描述
在这里插入图片描述
查看消息队列情况:
在这里插入图片描述

3.在consumer服务中编写消费逻辑,监听simple.queue这个队列
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.work queue工作队列模型

案例:模拟workqueue,实现一个队列绑定多个消费者

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

所以我们可以做一个消费预取限制:

重启消费者consumer类,并运行生产者测试类:

在这里插入图片描述

3.发布、订阅模型-fanout

1.发布订阅模式

1.交换机的作用:

  • 接收publisher发送的消息
  • 将消息按照规则路由到与之绑定的队列
  • 不能缓存消息,路由失败,消息丢失

2.常见exchange类型包括:

  • fanout:广播
  • direct:路由
  • topic:话题

2.fanout exchange

在这里插入图片描述

案例:利用springamqp演示fanoutexchange的使用

1.在consumer服务中,利用代码声明队列、交换机,并将两者绑定

在这里插入图片描述
在这里插入图片描述

2.在consumer服务中,编写两个消费者方法,分别监听fanout.queue1和fanout.queue2

在这里插入图片描述

3.在publisher中编写测试方法,向itcast.fanout发送消息
在这里插入图片描述

在这里插入图片描述

4.发布、订阅模型-direct

  • 每一个queue都与exchange设置一个bindingkey
  • 发布者发送消息时,指定消息的routingkey
  • exchange将消息路由到bindingkey与消息routingkey一致的队列

案例:利用springamqp演示directexchange的使用

1.利用@rabbitlistener声明exchange.queue、routingkey

2.在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2
在这里插入图片描述

启动消费者类,可以在mq服务器上看到新增的队列和路由:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.在publisher中编写测试方法,向itcast. direct发送消息

在这里插入图片描述
查看控制台信息:
在这里插入图片描述
队列1确实也是绑定的blue

5.发布、订阅模型-topic

queue与exchange指定bindingkey时可以使用通配符:

案例:利用springamqp演示topicexchange的使用
1.并利用@rabbitlistener声明exchange、queue、routingkey

2.在consumer服务中,编写两个消费者方法,分别监听topic.queue1和topic.queue2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.在publisher中编写测试方法,向itcast. topic发送消息
在这里插入图片描述

6.消息转换器

案例 : 测试发送object类型消息:
说明:在springamqp的发送方法中,接收消息的类型是object,也就是说我们可以发送任意对象类型的消息,springamqp会帮我们序列化为字节后发送。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
消息转换器:

推荐用json方式序列化,步骤如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
consumer模块接收消息的形式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 利用messageconverter实现的,默认是jdk的序列化
  • 注意发送方与接收方必须使用相同的messageconverter
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com