黑马商城微服务复习(5)

MQ

  • 一、同步调用和异步调用
    • [1. 同步调用](#1. 同步调用)
    • [2. 异步调用](#2. 异步调用)
  • 二、RabbitMQ
    • [1. 基础使用](#1. 基础使用)
    • [2. 实际操作 怎么用?](#2. 实际操作 怎么用?)
    • [3. RabbitMQ虚拟主机 数据隔离](#3. RabbitMQ虚拟主机 数据隔离)
    • [4. 在JAVA中实现RabbitMQ](#4. 在JAVA中实现RabbitMQ)
    • [5. 交换机种类](#5. 交换机种类)

一、同步调用和异步调用

1. 同步调用

微服务一旦拆分,必然涉及到服务之间的相互调用,目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中,调用者发起请求后需要等待服务提供者执行业务返回结果后,才能继续执行后面的业务。也就是说调用者在调用过程中处于阻塞状态,因此我们称这种调用方式为同步调用,也可以叫同步通讯。但在很多场景下,我们可能需要采用异步通讯的方式。

以下方式不一定都必须使用同步调用。

同步调用缺点:

  1. 拓展性差:每次有新的需求,现有支付逻辑都要跟着变化,代码经常变动,不符合开闭原则,拓展性不好。
  2. 性能下降:由于我们采用了同步调用,调用者需要等待服务提供者执行完返回结果后,才能继续向下执行,也就是说每次远程调用,调用者都是阻塞等待状态。最终整个业务的响应时长就是每次远程调用的执行时长之和。
  3. 级联失败:一个服务失败会导致后面的都没办法正常执行

2. 异步调用

异步调用方式其实就是基于消息通知的方式,一般包含三个角色:

  • 消息发送者:投递消息的人,就是原来的调用方
  • 消息Broker:管理、暂存、转发消息,你可以把它理解成微信服务器
  • 消息接收者:接收和处理消息的人,就是原来的服务提供方

二、RabbitMQ

1. 基础使用

  1. 我们同样基于Docker来安装RabbitMQ。
  2. 安装完成后,我们访问 http://192.168.150.101:15672即可看到管理控制台。首次访问需要登录,默认的用户名和密码在配置文件中已经指定了。
  • publisher:生产者,也就是发送消息的一方
  • consumer:消费者,也就是消费消息的一方
  • queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理
  • exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。
  • virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue

个人理解:

用这个图举例子,已知2已经修改完支付状态

生产者发送给交换机:支付服务把支付成功消息发送给消息代理

交换机通过路由策略把消息发送给特定队列

交易服务、通知服务,这些服务代表消费者,都在监听和他们绑定的队列,一旦队列中有消息就读取,执行对应操作。

虚拟主机的意思:一个项目可能对应一个MQ虚拟主机,以后有其他项目再新建一个虚拟主机

2. 实际操作 怎么用?

  1. 新建交换机
  2. 新建队列
  3. 绑定交换机和队列
  4. 发送消息测试

注意:交换机不能存储消息,只能路由

3. RabbitMQ虚拟主机 数据隔离

首先就要建立用户

  1. 层次关系:每个用户操作同一个项目都得有自己的虚拟主机,不能操作别人的虚拟主机

4. 在JAVA中实现RabbitMQ




发送者发送消息

消费者接收消息

1. workQueue

如果有两个消费者,因为刚开始消费者处理消息都是轮流处理,但是有的消费者能力强,有的弱,但是仍然是轮流处理,这样会导致效率变慢,因此修改消费者的消费策略。

5. 交换机种类

1. Fanout交换机(广播)

2. Direct交换机(指定部分队列)

3. Topic交换机

不同队列对应不同主题,用bindingkey设置,当消息发送时都会指定一个routingkey,如果这个消息符合某个bindingkey,则发送到指定队列上。

6. 基于代码生成交换机

7.基于注解声明交换机

在消息接收者处使用@RabbitListener注解进行声明交换机和注解


8. 消息转换器

所以使用json序列化代替默认的JDK序列化

相关推荐
原则猫15 小时前
自定义埋点上报扩展如何去做呢
架构
万里侯15 小时前
Kubernetes Operator模式:自动化运维的高级实践
微服务·容器·k8s
未若君雅裁16 小时前
微服务监控与 SkyWalking 链路追踪
微服务·架构·skywalking
高级c16 小时前
hccl 集合通信架构剖析:Ring-AllReduce 与通信-计算重叠设计
架构
心中有国也有家16 小时前
hccl 架构拆解:昇腾集合通信库到底在做什么?
人工智能·经验分享·笔记·分布式·算法·架构
heimeiyingwang16 小时前
【架构实战】可观测性体系:从监控到全链路追踪
网络·数据库·架构
菩提树下的凡夫16 小时前
FACE 与 AUTOSAR 开放架构标准的比较分析
架构
Raink老师16 小时前
【AI面试临阵磨枪-60】微服务下 AI 能力如何封装、网关、限流、监控
人工智能·微服务·面试
ㄣ知冷煖★17 小时前
统一网关架构实践:从 Token 鉴权到路由、策略与凭证池转发全链路解析
java·服务器·架构
GISer_Jing17 小时前
Three.JS渲染架构解读
java·javascript·架构