一、同步通讯
1. 同步调用的问题
同步调用的优点: 时效性较强,可以立即得到结果
微服务间基于Feign 的调用就属于同步方式,存在一些问题。
二、异步通讯
异步调用方案:
事件驱动优势:
优势一:服务解耦
优势二:性能提升,吞吐量提高
优势三:服务没有强依赖,不担心级联失败问题
优势四:流量削峰
异步通信的缺点:
1. 依赖于Broker的可靠性、安全性、吞吐能力
2. 架构复杂了,业务没有明显的流程线,不好追踪管理
三、MQ 常见框架
1. 初识MQ
MQ (MessageQueue),中文是消息队列,字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。
四、RabbitMQ快速入门
RabbitMQ是基于Erlang语言开发的开源消息通信中间件,官网地址:https://www.rabbitmq.com/
RabbitMQ的结构和概念
channel:操作MQ的工具
exchange:路由消息到队列中
queue:缓存消息
virtual host:虚拟主机,是对queue、exchange等资源的逻辑分组
常见消息模型
MQ的官方文档中给出了5个MQ的Demo示例,对应了几种不同的用法:
基本消息队列(BasicQueue)
总结:
1. 基本消息队列的消息发送流程:
(1)建立connection
(2)创建channel
(3)利用channel声明队列
(4)利用channel向队列发送消息
2. 基本消息队列的消息接收流程:
(1)建立connection
(2)创建channel
(3)利用channel声明队列(避免队列不存在)
(4)定义consumer的消费行为handleDelivery()(回调函数,异步处理机制)
(5)利用channel将消费者与队列绑定