本篇文章学习于 bilibili黑马 的视频 (狗头保命)
同步通讯 & 异步通讯 (RabbitMQ 的前置知识)
- 同步通讯:类似打电话,只有对方接受了你发起的请求,双方才能进行通讯, 同一时刻你只能跟一个人打视频电话。
- 异步通讯:类似发信息,不用对方接受,你就可以直接发信息,而且可以多线操作,同时跟多人发信息。
同步调用
发送方直接把消息传递给接收者, 如果中间有很多环节, 有一步出错, 那么所有操作都要回滚
同步调用的缺点:
- 拓展性差
- 性能下降
- 级联失败
异步调用方式其实就是基于消息通知的方式,一般包含三个角色:
消息发送者:投递消息的人,就是原来的调用方
消息Broker:管理、暂存、转发消息,你可以把它理解成微信服务器
消息接收者:接收和处理消息的人,就是原来的服务提供方
异步调用中, 发送方把消息发送给消息broker, 就算完成发送任务.
接收者从消息 breker 那里订阅消息
这样,发送消息的人和接收消息的人就完全解耦了。
此时, 如果发送方发送消息出错, 不需要全部回滚, 只需要将错误信息重新发布给消息代理
如果接受方接受消息过程出现错误, 那么消息代理重传就好, 发送方还是可以正常进行其他操作
异步调用的优势:
- 耦合度更低
- 性能更好
- 业务拓展性强
- 故障隔离,避免级联失败
异步通信的缺点:
- 完全依赖于Broker的可靠性、安全性和性能
- 架构复杂,后期维护和调试麻烦
消息Broker,目前常见的实现方案就是消息队列(MessageQueue),简称为MQ.
RabbitMQ是基于Erlang语言开发的开源消息通信中间件.
开启 RabbitMQ
打开这个目录(我的电脑是)
C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.7.4\sbin
双击这个文件
等待命令框为这个状态
点击跳转官网地址
RabbitMQ对应的架构
- publisher:生产者,也就是发送消息的一方
- consumer:消费者,也就是消费消息的一方
- queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理
- exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。
- virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue
简单的收发消息 (exchange & queue)
1. 添加 exchange
2. 添加 queue
3. 绑定 exchange 和 queue
点击之前创建的 exchange
添加绑定信息
4. 发送消息
输入信息, 点击发送
5. 查看接受的消息
点击被绑定的队列
获取消息
数据隔离
基于不同用户,将管理权限分离。
基于不同的 virtual host ,将每个项目的数据隔离。
创建用户
此时用户没有 virtral hosts
退出, 重新登录
创建 virtual hosts
此时用户 zrj 已经拥有 virtual hosts 了
将 virtual hosts 切换到 /zrj 之后, 查看 queue, 会发现之前创建的 test.queue 已经看不见了, 这就是基于 用户和 virtual hosts 的数据隔离效果
RabbitMQ(基础概念, 简单使用)(中):https://developer.aliyun.com/article/1518407