MQ=消息中间件,消息中间件是什么?我们可以拆分来看
消息:微信、短信、邮件消息等等......
中间件:顾名思义,在中间的组件,那在谁中间呢?当然是消息的发送者和消息的接收者。
定义:Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。
背景
在微服务架构以后,链式调用是我们写程序的一般流程,各个微服务模块之间的交互频繁会带来以下问题:
- 系统间接口的耦合程度比较严重(每新增一个下游系统功能,都要对上游相关接口进行改造)
- 面对大流量并发时,容易被冲垮(例如秒杀业务:上游只有一个下单操作,但是下游系统的处理逻辑包括读取订单、库存检查、库存冻结、余额检查、余额冻结、订单生成,余额扣减、库存扣减、生成流水、余额解冻、库存解冻等......一系列操作)
- 等待同步存在性能问题(整体系统的服务性能遵循“木桶理论”,整体应用系统的耗时取决于链路中最慢的那个接口,比如A调用了A/B/C三个接口,均为50ms,但是B又调用了B1,耗时2000ms,就直接拖累了整个服务性能)
所以针对上述背景中的问题,MQ的应用场景也就出来了
消息中间件的使用场景有哪些
- 解耦(做到系统间解耦,当新的模块接进来时,可以做到代码改动最小)
- 削锋(设置流量缓冲池,让后端系统根据自身吞吐能力进行消费不被冲垮)
- 异步(强弱依赖梳理,将非关键链路的操作异步化并提升整体系统的吞吐能力)
- 日志的处理
- 纯粹的消息通信
我们了解了MQ的理念后,就需要再学习一下它是什么实现的,也就是它实际落地的产品,MQ的落地实现有很多,其中包括:
Kafka、RabbitMQ、RocketMQ、ActiveMQ
我们这次就先来学习一下ActiveMQ。
ActiveMQ
学习MQ可以按照以下技术维度去学习,不仅仅是activeMQ,其他的mq也一样,只是具体的落地细节有差异。
- api发送和接收
- MQ的高可用性
- MQ的集群和容错配置
- MQ的持久化
- 延时发送/定时投递
- 签收机制
- Spring整合
- .....