跳到主要内容

01、ActiveMQ 简介

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(一对多类似公众号广播),合适的情况下才会将消息发送给接收者。该过程为执行过程中为异步,且发送和接收生命周期无必然关系(即关机了也行)。发送者和接受者不必了解对方,只需要确认消息;发送者和接受者不必同时在线

缺点:

不能同步调用,不能实时回复,不能响应某个调用的回复