初识MQ
同步异步
同步
优点: 等待结果出来才返回, 实时性强
缺点:
- 可拓展性差 –> 耦合大
- 性能下降 –> 延时高
- 级联失败问题
异步调用
优点:
解除耦合, 拓展性强
无需等待,性能好
故障隔离
缓存消息/流量削峰填谷缺点:
不能立即得到调用结果,时效性差
不确定下游业务执行是否成功
业务安全依赖于 Broker(消息队列) 的可靠性
flowchart LR
消息发送者 ---> 消息队列 ---> 消息接收者1
消息队列 ---> 消息接收者2
MQ
消息队列/字面来看就是存放消息的队列,
也就是异步调用中的 Broker 。
RabbitMQ
RabbitMQ 的整体架构及核心概念:
- virtual-host: 虚拟主机/起到数据隔离的作用
- publisher: 消息发送者
- consumer: 消息的消费者
- queue: 队列, 存储消息
- exchange: 交换机/负责路由消息
flowchart LR
P[Publisher]
subgraph Broker[RabbitMQ Server / Broker]
subgraph VHost1[Virtual Host]
E1[Exchange]
E2[Exchange]
Q1[Queue]
Q2[Queue]
Q3[Queue]
end
end
C1[Consumer]
C2[Consumer]
P --> E1
P --> E2
E1 --> Q1
E2 --> Q1
E2 --> Q2
E2 --> Q3
Q1 --> C1
Q2 --> C2
Q3 --> C1
ex & queue
rabbitMQ中一定要将二者绑定, 直接给交换机发信息是没用的 -> not routed
visual host
隔离机制, 各自在自己的host跑, 相互不影响
JAVA操作MQ
SpringAMQP
1. 引入依赖
2.配置MQ地址
3.添加实例