1、简介
Apache ActiveMQ是Apache软件基金会的一个开源项目,是一个基于消息的通信中间件。ActiveMQ是JMS的一个具体实现,支持JMS的两种消息模型。ActiveMQ使用AMQP协议集成多平台应用,使用STOMP协议通过websockets在Web应用程序之间交换消息,使用MQTT协议管理物联网设备。(参考ActiveMQ官网)
2、JMS
JMS(Java Message Service),是一个基于消息的中间件服务,它是java的一个接口规范,而不是一个具体的软件或者库。它支持两种消息传送模型,点对点模型(Point to Point Model)和发布/订阅模型(Publisher/Subscriber Model)。(参考Java EE 8官方文档)
3、点对点模型
4、发布/订阅模型
6、JMS编程模型
7、MQ的种类具体有
MQ的种类具体有:kafka、RabbitMQ、RocketMQ、ActiveMQ
通过技术维度引出专业名词
技术维度 | 专业名词 |
---|---|
消息中间件 | 有api发送和接收 |
不能宕机 | 高可用性 |
需要多而不是单机版 | 集群和容错配置 |
不能断不能丢 | 持久化 |
取消撤回 | 延时发送/定时投递 |
有无收到 | 签收机制 |
如果没有引入MQ,生产者和消费者互相调用,在大型分布式应用中,系统间的RPC交互繁杂,即每增加一个消费者,生产者都要修改(系统之间的接口耦合比较严重);等待同步消息性存在问题(RPC接口基本上是同步调用,类似“木桶理论”);面对消息多容易冲垮
引入MQ可以主要是为了(解耦、消峰、异步)
- 抵御洪峰流量,(吞吐量)达到保护主业务的目的,消息都给中间件(消峰)
- 消息给中间件后,等通知,不用一直等着(异步)
- 消息给了中间件,与消息多少没关系,也就是新模块进来,代码改动最小(解耦)
8、ActiveMQ 定义
通过前言浅显易懂的表述,可以引出MQ的定义
- 利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信完成分布式系统集成
- 消息传递和消息排队在分布式钟提供了应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等功能
大致的具体过程中是发送者发送消息给消息服务器,消息服务器将其消息放在若干队列(一对一)/主题topic(一对多类似公众号广播),合适的情况下才会将消息发送给接收者。该过程为执行过程中为异步,且发送和接收生命周期无必然关系(即关机了也行)。发送者和接受者不必了解对方,只需要确认消息;发送者和接受者不必同时在线
缺点:
不能同步调用,不能实时回复,不能响应某个调用的回复