023. ActiveMQ 支持的消息协议

2021-03-03 10:58:40 浏览数 (1)

1. ActiveMQ 支持哪些协议?


  • ActiveMQ 支持多种协议传输和传输方式,允许客户端使用多种协议连接。
  • ActiveMQ 支持的协议:AUTO、OpenWire、AMQP、Stomp、MQTT 等。
  • ActiveMQ 支持的基础传输方式:VM、TCP、SSL、UDP、Peer、Multicast、HTTP(S) 等,以及更高级的 Failover、Fanout、Discovery、ZeroConf 方式。
ActiveMQ 协议连接配置
  • 在 ${ACTIVEMQ_HOME}/conf/activemq.xml 中,通过配置 <transportConnectors> 就可以使用多种传输方式。
代码语言:javascript复制
<transportConnectors>
    <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
</transportConnectors>

2. 数据传输方式及配置


1. TCP
2. SSL
3. NIO
4. UDP
5. HTTP(S)
6. VM

3. OpenWire 协议


1. OpenWire 协议是什么?
  • OpenWire 是 Apache 的一种跨语言的协议,允许从不通的语言和平台访问 ActiveMQ,是 ActiveMQ 4.x 以后的版本默认的传输协议。
  • http://activemq.apache.org/openwire-version-2-specification
  • http://activemq.apache.org/wire-protocol.html
2. OpenWire 协议如何使用
  • OpenWire 支持 TCP、SSL、NIO、UDP、VM 等传输方式,直接配置这些连接,就是使用的 OpenWire 协议,OpenWire 有自己的配置参数,客户端和服务器端配置的参数名都是通过前缀“WireFormat.”表示。
  • http://activemq.apache.org/configuring-wire-formats.html
  • 示例:tcp://localhost:61616?wireFormat.cacheEnabled=false&wireFormat.tightEncodingEnabled=false
  • 配置参数说明 属性 默认值 描述 stackTraceEnabled true 是否应该把已经发生并且跟踪到的堆栈异常,通过 broker 发送到客户端。 tcpNoDelayEnabled true socket 的 NoDelay 参数。 cacheEnabled true 是否应该缓存不断重复的值,以便减少编组(马上要进行的发送)。 tightEncodingEnabled true 根据 CPU 使用情况,自动调整传输内容大小(压缩比例)。 sizePrefixDisabled false 每个包封送前,每个包的大小是否应该作为前缀。 maxInactivityDuration 30000 连接的最大空闲时间,以毫秒为单位。<br/>broker服务器会根据配置关闭超时的连接。<br/>同时也可以通过心跳机制来保持连接。<br/>值 <=0 则禁用活动连接的监测。 maxInactivityDurationInitalDelay 10000 连接建立之后,多久开始进行超时检测。 cacheSize 1024 如果能被缓存,那么这个规定了缓存的最大数量。此属性在 ActiveMQ 的 4.1 中开始添加使用。 maxFrameSize MAX_LONG 可发送最大帧大小。<br/>可以帮助防止 OOM DOS 攻击。

4. MQTT 协议


1. MQTT 协议是什么?
  • MQTT(Message Queuing Telemetry Transport) 消息队列遥测传输是 IBM 开发的一个即时通讯协议,已成为物联网通信的标准。
2. 为什么使用 MQTT
  • MQTT 的结构简单,相对于其他消息协议,它更加轻量级。适合在计算能力有限、低带宽、不可靠的网络环境使用。
3. MQTT 的发布订阅模型
4. MQTT 服务质量
  • 什么是服务质量
    • 服务质量(QoS)级别是一种关于发送者和接收者之间信息投递的保证协议。MQTT 中有三种 QoS 级别:
      • 至多一次(0)
      • 至少一次(1)
      • 只有一次(2)
  • 为什么要有服务质量
    • QoS 是 MQTT 的一个主要功能,它使得在不可靠的网络下进行通信变得更为简单,因为即使在非常不可靠的网络下,协议也可以掌控是否需要重发消息并保证消息到达。它也能帮助客户端根据网络环境和程序逻辑来自由选择 QoS。
  • 它是如何工作的
    • QoS level 0
    • Qos level 1
      • 针对客户端发布消息到服务器的消息流。
      • 针对服务器发布到订阅者的消息流。
    • QoS level 2
      • 针对客户端发布消息到服务器的消息流。
      • 针对服务器发布到订阅者的消息流。
5. ActiveMQ 服务器端配置
代码语言:javascript复制
<transportConnectors>
    <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
6. Spring 使用 MQTT

5. AUTO 协议


1. AUTO 协议是什么
  • Auto 自动检测协议。
  • 从 ActiveMQ 5.13.0 开始,ActiveMQ 开始支持协议格式检测,可以自动检测 OpenWire、STOMP、AMQP 和 MQTT。允许这四种类型的客户端共享一个传输。
2. 如何使用 AUTO 协议

0 人点赞