1、JMS(Java Message Service,Java消息服务)
1.1 定义
1.2 JMS的对象模型
名称 | 描述 |
---|---|
ConnectionFactory | 连接工厂 |
Connection | 连接 |
Session | 会话 |
Destination | 目的 |
MessageProducer | 生产者 |
MessageConsumer | 消费者 |
Message | 消息 |
Broker | 消息中间件的实例(ActiveMQ) |
1.3 JMS消息模型
-
Point-to-Point (P2P) /点对点
-
Publish/Subscribe (Pub/Sub) /主题(发布订阅)
1.4 JMS的消息结构
-
消息头
-
消息属性:可以理解为消息的附加消息头,属性名可以自定义
-
消息体
2、ActiveMQ概念
2.1 定义
ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。
2.2 特性
2.3 ActiveMQ支持哪些协议
2.4 OpenWire协议
2.4.1 OpenWire协议是什么
2.4.2 OpenWire协议如何使用
示例
OpenWire的配置参数说明
属性 | 默认值 | 描述 |
---|---|---|
stackTraceEnabled | true | 是否应该把已经发生并且跟踪到的堆栈异常,通过Broker发送到客户端 |
tcpNoDelayEnabled | true | socket的NoDelay参数 |
cacheEnabled | true | 如果不断重复的值进行缓存,以便少编组(马上要进行的发送)发生 |
tightEncodingEnabled | true | 根据CPU使用情况,自动调整传输内容大小(压缩比例) |
prefixPacketSize | true | 在每个包被编组前(马上要被发送),每个包的大小是否应该作为前缀连接的最大空闲时间,以毫秒为单位。 |
maxInactivityDuration | 30000 | broker服务会根据配置关闭超时的连接。同时也可以通过心跳机制来保持连接。值<=0则禁用活动连接的监测。 |
maxlnactivityDurationInitalDelay | 10000 | 连接建立之后,多久开始进行超时检测 |
cacheSize | 1024 | 如果能被缓存,那么这个规定了缓存的最大数量。此属性中在ActiveMQ的4.1中开始添加使用可发送最大帧大小 |
maxFrameSize | MAX_ LONG | 可以帮助防止OOM DOS攻击 |
2.5 为什么使用MQTT协议
2.5.1 MQTT的发布订阅模型
2.5.2 MQTT服务质量
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配置参数说明
属性 | 默认值 | 描述 |
---|---|---|
maxFrameSize | 268435456 | (v5.12.0)可以发送的最大帧大小。协议限制为256MB,其值不能设置得更高。可以帮助防止OOM DOS攻击 |
配置示例
<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使用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有哪些集群部署方式
Master-Slave部署方式 | Broker-Cluster部署方式 | Master-Slave与Broker-Cluster相结合的部署方式 |
---|
3.2 Master-Slave部署方式
共享同一个文件系统
共享同一个数据库
3.3 Broker-Cluster部署方式
3.4 Master-Slave与Broker-Cluster相结合的部署方式
4、ActiveMQ持久化机制
4.1 Queue类型的持久化机制
4.2 Topic类型的持久化机制
4.3 存储方式
4.3.1 JDBC方式
优点 | 缺点 |
---|---|
方便管理 | 性能低 |
可以支持强一致性 | / |
4.3.2 AMQ方式
优点 | 缺点 |
---|---|
性能高于JDBC | 索引占用磁盘空间量大 |
/ | 重建索引速度非常慢 |
4.3.3 LevelDB方式
特点
L evelDB的结构
ActiveMQ配置LevelDB:修改配置文件${ACTIVEMQ_ HOME}/conf/activemq.xml
<persistenceAdapter>
<levelDB directory="${activemq.data}/activemq-data"/>
</persistenceAdapter>
5、ActiveMQ事务实现机制
ActiveMQ事务实现的是最终一致性
生产者端实现机制如下:
消费者端实现机制如下: