关于java:消息中间件之ActiveMQ

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

属性 默认值 形容
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级别:

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

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

特点

  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事务实现的是最终一致性

生产者端实现机制如下:

消费者端实现机制如下:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理