服务异步通信--RabbitMQ
【摘要】 黑马- SpringCloud微服务技术栈 项目中设计到的服务异步通信,项目部署成功,知识介绍全面。项目梳理知识点是按照集数依次整理,方便日后回来查找。考虑到不是固定的联网方式,时而WiFi,时而热点,配置静态IP会导致每次网络变更后都需要重新配置,所以虚拟机使用的动态路由,当需要运行相关程序时,IP变化,只需要修改yml文件里的配置即可。将代码路径列举主要是为后续审查。mq的代码路径E:\...
黑马- SpringCloud微服务技术栈 项目中设计到的服务异步通信,项目部署成功,知识介绍全面。
- 知识点是按照集数依次整理,方便日后回来查找。
- 考虑到不是固定的联网方式,时而WiFi,时而热点,配置静态IP会导致每次网络变更后都需要重新配置,所以虚拟机使用的动态路由,当需要运行相关程序时,IP变化,只需要修改yml文件里的配置即可。
- 将代码路径列举主要是为后续审查。
- mq的代码路径
E:\微服务\实用篇\day04-MQ\资料\mq-demo
。
- MQ–RabbitMQ–SpringAMQP(P61)
- 同步调用–优点:时效性较强,可以立即得到结果;缺点:耦合度高、性能和吞吐能力下降、有额外的资源消耗、有级联失败问题。
- 异步调用的实现-事件驱动优势,事件驱动架构-Broker。
- 异步通信–优点:耦合度低、吞吐量提升、故障隔离、流量削峰;缺点:依赖于Broker的可靠性、安全性、吞吐能力、架构复杂了,业务没有明显的流程线,不好追踪管理。
- MQ(MessageQueue):消息队列,存放消息的队列。
- RabbitMQ、ActiveMQ、RocketMQ、Kafka的对比分析。(P64)
- RabbitMQ–部署安装、页面介绍、结构和概念。
# 在线拉取
docker pull rabbitmq:3-management
# 上传好tar包,命令加载镜像
docker load -i mq.tar
# 运行MQ容器
docker run \
-e RABBITMQ_DEFAULT_USER=itcast \
-e RABBITMQ_DEFAULT_PASS=123321 \
--name mq \
--hostname mq1 \
-p 15672:15672 \
-p 5672:5672 \
-d \
rabbitmq:3-management
# 查看全部容器
docker ps -a
# 重启后重启容器
docker start mq
- RabbitMQ部署成功后页面元素分析–channel:操作MQ的工具、exchange:路由消息到队列、queue:缓存消息、virtual host:虚拟主机,是对queue、exchange等资源的逻辑分组。
- RabbitMQ入门案例–简单队列模型。官方文档-入门案例-publisher:消息发布者,将消息发送到队列;queue:消息队列,负责接收并缓存消息;consumer:订阅队列,处理队列中的消息。
- 基本消息队列的消息发送流程和基本消息队列的消息接收流程。(P67)
- SpringAMQP–基于AMQP协议定义的一套API规范,提供模板来发送和接受消息;AMQP介绍–应用间消息通信的一种协议,与语言和平台无关。
- 简单队列模型–利用SpringAMQP实现HelloWorld的基础消息队列功能–引入amqp的starter依赖;配置RabbitMQ地址;利用RabbitTemplate的convertAndSend方法来发送消息。(P67)
- Work queue–工作队列,可以提高消息处理速度,避免队列消息堆积-默认为:消息预取。
- Work模型–多个消费者绑定到一个队列,同一条消息只会被一个消费者处理;通过设置prefetch来控制消费者预取的消息数量。(P71)
- 发布、订阅模型–允许将同一消息发送给多个消费者。实现方式是加入了exchange(交换机);exchange类型-Fanout:广播、Direct:路由、Topic:话题。(P72)
- exchange(交换机)作用–接收publisher发送的消息;将消息按照规则路由到与之绑定的队列;负责消息路由,而不是存储,路由失败则消息丢失。
- Fanout Exchange–将接收到的消息路由到每一个跟其绑定的queue。
- Direct Exchange–路由模式会将接收到的消息根据规则路由到指定的Queue(每一个Queue都与Exchange设置一个BindingKey);发布者发送消息时,指定消息的RoutingKey;Exchange将消息路由到BindingKey与消息RoutingKey一致的队列。(P74)
- TopicExchange–与Direct Exchange类似,区别在于routingKey必须是多个单词的列表,并且以 . 分割;Queue与Exchange指定BindingKey时可以使用通配符:#-代指0个或多个单词;*:代指一个单词。
- 消息转换器–SpringAMQP中消息的反序列化和反序列化-利用MessageConverter实现的,默认是JDK的序列化;注意发送方与接收方必须使用相同的MessageConverter。
->微服务技术栈异步通信课程视频
https://www.bilibili.com/video/BV1LQ4y127n4?p=61
<-
学习整理笔记,记录每一个学习瞬间
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)