剑指offer之消息中间件ActiveMQ知识总结

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 剑指offer之消息中间件ActiveMQ知识总结

1、JMS(Java Message Service,Java消息服务)



1.1 定义


Java消息服务(Java Message Service,即JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM) 的API, 用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的APl。


1.2 JMS的对象模型


image.png


1.3 JMS消息模型


  1. Point-to-Point (P2P) /点对点


image.png


  1. Publish/Subscribe (Pub/Sub) /主题(发布订阅)


image.png


1.4 JMS的消息结构


消息头、消息属性、消息体


1.消息头


image.png


2.消息属性:可以理解为消息的附加消息头,属性名可以自定义


image.png


3.消息体


image.png


2、ActiveMQ概念



2.1 定义


ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。


ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。


2.2 特性


  1. 支持多种编程语言
  2. 支持多种传输协议
  3. 有多种持久化方式


2.3 ActiveMQ支持哪些协议


1.ActiveMQ支持多种协议传输和传输方式,允许客户端使用多种协议连接。

2.ActiveMQ支持的协议: AUTO、 OpenWire、 AMQP、Stomp、 MQTT等。

3.ActiveMQ支持的基础传输方式: VM、 TCP、SSL、 UDP 、Peer、 Multicast、 HTTP(S)等,以及更高级的Failover、Fanout、 Discovery、 ZeroConf方式。


2.4 OpenWire协议


2.4.1 OpenWire协议是什么


OpenWire是Apache的一种跨语言的协议,允许从不同的语言和平台访问ActiveMQ,是ActiveMQ 4.x以后的版本默认的传输协议。


2.4.2 OpenWire协议如何使用


OpenWire 支持TCP、SSL、 NIO、UDP、VM等传输方式,直接配置这些连接,就是使用的OpenWire协议,OpenWire有 自己的配置参数,客户端和服务器端配置的参数名都通过缀“wireFormat.” 表示。


示例


image.png


OpenWire的配置参数说明


image.png


2.5 为什么使用MQTT协议


MQTT的结构简单,相对于其它消息协议,它更加轻量级。适合在计算能力有限、低带宽、不可靠的网络环境使用。


2.5.1 MQTT的发布订阅模型


image.png


2.5.2 MQTT服务质量


服务质量(QoS) 级别是一种关于发送者和接收者之间信息投递的保证协议。MQTT中有三种QoS级别:

 1.至多一次(0)

 2.至少一次(1)

 3.只有一次(2)

QoS是MQTT的一个主要功能,它使得在不可靠的网络下进行通信变得更为简单,因为即便是在非常不可靠的网络下,协议也可以掌控是否需要重发消息并保证消息到达。它也能帮助客户端根据网络环境和程序逻辑来自由选择QoS.


2.5.3 ActiveMQ中如何使用MQTT协议


ActiveMQ 服务器端配置


<transportConnectors>
  <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
  <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize= 104857600"/>
</transportConnectors>


MQTT配置参数说明


image.png


配置示例


<transportConnector name="mqtt" uri="mtt://localhost:1883?wireFormat.maxFrameSize=100000"/>


MQTT使用NIO


<transportConnector name="mgtt+nio" uri="mtt+nio://localhost:1883"/>


MQTT使用NIO + SSL


<transportConnector name="mqtt+nio" uri="mqtt+niossl://localhost:1883"/>


2.5.4 Spring使用MQTT


Spring Integration提供了MQTT协议的支持,通过Maven添加依赖即可使用。


<dependency>
    <groupld>org.springframework.integration</groupld>
    <artifactld>spring-integration-mqtt</artifactld>
    <version>5.1.1.RELEASE</version>
</dependency>


2.6 AUTO协议是什么


AUTO自动检测协议从ActiveMQ 5.13.0开始,ActiveMQ 开始支持协议格式检测,可以自动检测OpenWire、STOMP、 AMQP和MQTT。允许这4种类型的客户端共享一个传输


AUTO使用TCP


<transportConnector name="auto" uri="auto://localhost:5671"/>


AUTO使用SSL


<transportConnector name="auto+ssl" uri="autssl://localhost:5671"/>


AUTO使用NIO


<transportConnector name="auto+nio" uri="auto+nio://localhost:5671"/>


AUTO使用NIO+SSL


<transportConnector name="auto+nio+ssl" uri="auto+nioss://localhost:5671"/>


3、ActiveMQ高可用集群方案



3.1 ActiveMQ有哪些集群部署方式

image.png

3.2 Master-Slave部署方式


共享同一个文件系统


image.png


共享同一个数据库


image.png


3.3 Broker-Cluster部署方式


image.png


3.4 Master-Slave与Broker-Cluster相结合的部署方式


image.png


4、ActiveMQ持久化机制



4.1 Queue类型的持久化机制


image.png


4.2 Topic类型的持久化机制


image.png


4.3 存储方式


4.3.1 JDBC方式


将消息存储到数据库中,例如: Mysql、 SQL Server、Oracle、 DB2等


image.png


4.3.2 AMQ方式


基于文件的存储方式,它具有写入速度快和容易恢复的特点,但是由于其重建索引时间过长,而且索引文件占用磁盘空间过大,所以已经不推荐使用。


image.png


4.3.3 LevelDB方式


LevelDB是Google开发的一套用于持久化数据的高性能类库.LevelDB并不是一-种服务,用户需要自行实现Server。是单进程的服务,能够处理十亿级别规模Key-Value型数据,占用内存小。


特点


  1. 基于K-V存储
  2. Key值有序存储
  3. 操作接口简单
  4. 支持数据快照
  5. 支持数据压缩


L evelDB的结构


image.png


ActiveMQ配置LevelDB:修改配置文件${ACTIVEMQ_ HOME}/conf/activemq.xml


<persistenceAdapter>
  <levelDB directory="${activemq.data}/activemq-data"/>
</persistenceAdapter>


5、ActiveMQ事务实现机制



ActiveMQ事务实现的是最终一致性


生产者端实现机制如下:


image.png


消费者端实现机制如下:


image.png


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
2月前
|
消息中间件 存储 监控
Java一分钟之-ActiveMQ:消息中间件
【6月更文挑战第11天】Apache ActiveMQ是广泛使用的开源消息中间件,支持JMS和多种消息协议。本文介绍了ActiveMQ的基础知识,包括消息队列和主题模型,以及持久化和高可用性配置。同时,提出了三个常见问题:配置不当、消息堆积和网络错误,并给出了相应的解决策略。通过Java示例代码展示了如何使用ActiveMQ发送和接收消息。正确配置、管理消息处理和持续监控是确保ActiveMQ高效运行的关键。
48 2
|
1月前
|
消息中间件 NoSQL Kafka
消息中间件(RocketMQ、RabbitMQ、ActiveMQ、Redis、kafka、ZeroMQ)以及之间的区别
消息中间件(RocketMQ、RabbitMQ、ActiveMQ、Redis、kafka、ZeroMQ)以及之间的区别
|
9月前
|
消息中间件 Java Maven
消息中间件系列教程(03) -ActiveMQ -点对点&发布订阅模式
消息中间件系列教程(03) -ActiveMQ -点对点&发布订阅模式
74 0
|
9月前
|
消息中间件 Java Linux
消息中间件系列教程(02) -ActiveMQ -安装&入门案例
消息中间件系列教程(02) -ActiveMQ -安装&入门案例
45 0
|
消息中间件 缓存 安全
SpringBoot与JMS集成(中间件为ActiveMQ)
Apache ActiveMQ是最受欢迎和强有力的开源消息和集成模式服务器,支持许多跨语言客户端和协议,便利使用企业集成模式还有许多先进的特性。
|
消息中间件 存储 缓存
消息中间件ActiveMQ常见问题解析
消息中间件ActiveMQ常见问题解析
335 6
|
消息中间件 XML 开发框架
|
消息中间件 开发框架 自然语言处理
JAVA分布式--ActiveMQ 消息中间件(上)
JAVA分布式--ActiveMQ 消息中间件(上)
174 1
JAVA分布式--ActiveMQ 消息中间件(上)
|
消息中间件 Java
JAVA分布式--ActiveMQ 消息中间件(下)
JAVA分布式--ActiveMQ 消息中间件(下)
104 1
JAVA分布式--ActiveMQ 消息中间件(下)
|
消息中间件 Java Maven
消息中间件学习笔记--ActiveMQ(三、主题模式)
消息中间件学习笔记--ActiveMQ(三、主题模式)
166 0
消息中间件学习笔记--ActiveMQ(三、主题模式)