0
点赞
收藏
分享

微信扫一扫

消息中间件之ActiveMQ

color_小浣熊 2022-02-21 阅读 64

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

1.1 定义

1.2 JMS的对象模型

名称描述
ConnectionFactory连接工厂
Connection连接
Session会话
Destination目的
MessageProducer生产者
MessageConsumer消费者
Message消息
Broker消息中间件的实例(ActiveMQ)

1.3 JMS消息模型

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

    image-20220220224711788

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

    image-20220220230555126

1.4 JMS的消息结构

  1. 消息头

    image-20220220230826606

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

    image-20220220230935372

  3. 消息体

    image-20220220231010881

2、ActiveMQ概念

2.1 定义

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

2.2 特性

2.3 ActiveMQ支持哪些协议

2.4 OpenWire协议

2.4.1 OpenWire协议是什么

2.4.2 OpenWire协议如何使用

示例

image-20220220231926849

OpenWire的配置参数说明

属性默认值描述
stackTraceEnabledtrue是否应该把已经发生并且跟踪到的堆栈异常,通过Broker发送到客户端
tcpNoDelayEnabledtruesocket的NoDelay参数
cacheEnabledtrue如果不断重复的值进行缓存,以便少编组(马上要进行的发送)发生
tightEncodingEnabledtrue根据CPU使用情况,自动调整传输内容大小(压缩比例)
prefixPacketSizetrue在每个包被编组前(马上要被发送),每个包的大小是否应该作为前缀连接的最大空闲时间,以毫秒为单位。
maxInactivityDuration30000broker服务会根据配置关闭超时的连接。同时也可以通过心跳机制来保持连接。值<=0则禁用活动连接的监测。
maxlnactivityDurationInitalDelay10000连接建立之后,多久开始进行超时检测
cacheSize1024如果能被缓存,那么这个规定了缓存的最大数量。此属性中在ActiveMQ的4.1中开始添加使用可发送最大帧大小
maxFrameSizeMAX_ LONG可以帮助防止OOM DOS攻击

2.5 为什么使用MQTT协议

2.5.1 MQTT的发布订阅模型

image-20220220232544323

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

属性默认值描述
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使用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部署方式

共享同一个文件系统

image-20220220234348440

共享同一个数据库

image-20220220234418766

3.3 Broker-Cluster部署方式

image-20220220234556237

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

image-20220220234657847

4、ActiveMQ持久化机制

4.1 Queue类型的持久化机制

image-20220220235207879

4.2 Topic类型的持久化机制

image-20220220235251961

4.3 存储方式

4.3.1 JDBC方式

优点缺点
方便管理性能低
可以支持强一致性/

4.3.2 AMQ方式

优点缺点
性能高于JDBC索引占用磁盘空间量大
/重建索引速度非常慢

4.3.3 LevelDB方式

特点

L evelDB的结构

image-20220220235840522

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

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

5、ActiveMQ事务实现机制

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

生产者端实现机制如下:

消费者端实现机制如下:

2

举报

相关推荐

0 条评论