共计 3856 个字符,预计需要花费 10 分钟才能阅读完成。
1、JMS(Java Message Service,Java 音讯服务)
1.1 定义
Java 音讯服务(Java Message Service, 即 JMS)利用程序接口是一个 Java 平台中对于面向消息中间件(MOM) 的 API, 用于在两个应用程序之间,或分布式系统中发送音讯,进行异步通信。Java 音讯服务是一个与具体平台无关的 APl。
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 出品,最风行的,能力强劲的开源音讯总线。
ActiveMQ 是一个齐全反对 JMS1.1 和 J2EE 1.4 标准的 JMS Provider 实现,只管 JMS 标准出台曾经是很久的事件了,然而 JMS 在当今的 J2EE 利用两头依然扮演着非凡的位置。
2.2 个性
- 反对多种编程语言
- 反对多种传输协定
- 有多种长久化形式
2.3 ActiveMQ 反对哪些协定
- ActiveMQ 反对多种协定传输和传输方式,容许客户端应用多种协定连贯。
- ActiveMQ 反对的协定: AUTO、OpenWire、AMQP、Stomp、MQTT 等。
- 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.”示意。
示例
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 协定
MQTT 的构造简略,绝对于其它音讯协定,它更加轻量级。适宜在计算能力无限、低带宽、不牢靠的网络环境应用。
2.5.1 MQTT 的公布订阅模型
2.5.2 MQTT 服务质量
服务质量(QoS) 级别是一种对于发送者和接收者之间信息投递的保障协定。MQTT 中有三种 QoS 级别:
- 至少一次(0)
- 至多一次(1)
- 只有一次(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 配置参数阐明
属性 | 默认值 | 形容 |
---|---|---|
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 自动检测协定从 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 有哪些集群部署形式
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 形式
将音讯存储到数据库中,例如: Mysql、SQL Server、Oracle、DB2 等
长处 | 毛病 |
---|---|
方便管理 | 性能低 |
能够反对强一致性 | / |
4.3.2 AMQ 形式
基于文件的存储形式,它具备写入速度快和容易复原的特点,然而因为其重建索引工夫过长,而且索引文件占用磁盘空间过大,所以曾经不举荐应用。
长处 | 毛病 |
---|---|
性能高于 JDBC | 索引占用磁盘空间量大 |
/ | 重建索引速度十分慢 |
4.3.3 LevelDB 形式
LevelDB 是 Google 开发的一套用于长久化数据的高性能类库.LevelDB 并不是一 - 种服务,用户须要自行实现 Server。是单过程的服务,可能解决十亿级别规模 Key-Value 型数据,占用内存小。
特点
- 基于 K - V 存储
- Key 值有序存储
- 操作接口简略
- 反对数据快照
- 反对数据压缩
L evelDB 的构造
ActiveMQ 配置 LevelDB:批改配置文件 ${ACTIVEMQ_ HOME}/conf/activemq.xml
<persistenceAdapter>
<levelDB directory="${activemq.data}/activemq-data"/>
</persistenceAdapter>
5、ActiveMQ 事务实现机制
ActiveMQ 事务实现的是最终一致性
生产者端实现机制如下:
消费者端实现机制如下: