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音讯模型

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

  2. Publish/Subscribe (Pub/Sub) /主题(公布订阅)

1.4 JMS的音讯构造

音讯头、音讯属性、音讯体
  1. 音讯头

  2. 音讯属性:能够了解为音讯的附加音讯头,属性名能够自定义

  3. 音讯体

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.” 示意。

示例

OpenWire的配置参数阐明

属性默认值形容
stackTraceEnabledtrue是否应该把曾经产生并且跟踪到的堆栈异样,通过Broker发送到客户端
tcpNoDelayEnabledtruesocket的NoDelay参数
cacheEnabledtrue如果一直反复的值进行缓存,以便少编组(马上要进行的发送)产生
tightEncodingEnabledtrue依据CPU应用状况,主动调整传输内容大小(压缩比例)
prefixPacketSizetrue在每个包被编组前(马上要被发送),每个包的大小是否应该作为前缀连贯的最大闲暇工夫,以毫秒为单位。
maxInactivityDuration30000broker服务会依据配置敞开超时的连贯。同时也能够通过心跳机制来放弃连贯。值<=0则禁用流动连贯的监测。
maxlnactivityDurationInitalDelay10000连贯建设之后,多久开始进行超时检测
cacheSize1024如果能被缓存,那么这个规定了缓存的最大数量。此属性中在ActiveMQ的4.1中开始增加应用可发送最大帧大小
maxFrameSizeMAX_ LONG能够帮忙避免OOM DOS攻打

2.5 为什么应用MQTT协定

MQTT的构造简略,绝对于其它音讯协定,它更加轻量级。适宜在计算能力无限、低带宽、不牢靠的网络环境应用。

2.5.1 MQTT的公布订阅模型

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配置参数阐明

属性默认值形容
maxFrameSize268435456(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型数据,占用内存小。

特点

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

L evelDB的构造

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

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

5、ActiveMQ事务实现机制

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

生产者端实现机制如下:

消费者端实现机制如下: