ActiveMQ协议详解

时间:2022-07-24
本文章向大家介绍ActiveMQ协议详解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

ActiveMQ协议详解

一. 传输协议概述

  1. Connectors:ActiveMQ提供的用来实现连接通信的功能,包括Client-Broker和Broker-Broker。ActiveMQ允许客户端使用多种协议进行连接。
  2. 配置Transport Connector:在activemq.xml配置文件中:
<transportConnectors>
    <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
    <transportConnector name="openwire" uri="tcp://127.0.0.1:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="amqp" uri="amqp://127.0.0.1:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="stomp" uri="stomp://127.0.0.1:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="mqtt" uri="mqtt://127.0.0.1:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="ws" uri="ws://127.0.0.1:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
  1. ActiveMQ支持的Client-Broker通信协议如下:
    1. TCP:这个也是默认的通信协议
    2. NIO
    3. UDP
    4. SSL
    5. HTTP(S)
    6. VM:如果客户端和Broker在同一个虚拟机内运行,则可以通过VM协议进行通信,有效减少网络传输的开销。

二. TCP

  1. TCP是默认使用的传输协议,默认监听端口61616
  2. 在网络传输数据前,必须先对数据进行序列化。消息是通过一个叫wire protocol的协议被序列化成字节流的。默认情况下,ActiveMQ将wire protocol称为openwire,目的是提高网络传输效率,保证数据的快速交互。
  3. TCP连接的URI格式:tpc://hostname:port?key=value&key=value。(加粗部分为必须的)
  4. TCP传输的优点
    1. 可靠性高,稳定性强
    2. 以字节流方式传递,效率高
    3. 应用广泛,支持任何平台
  5. 所有关于Transport协议的可配置参数,可以参考官网:http://activemq.apache.org/configuring-version-5-transports.html

三. NIO

  1. NIO协议和TCP类似,但是NIO更侧重于底层的访问操作。它允许开发人员对同一资源可以有更多的Client端调用,并且服务端可以承担更多的负载。
  2. NIO协议适用的场景:
  3. 可能有大量的Client去连接Broker 一般情况下,受到操作系统线程数量的限制,Broker无法承载过多的Client连接。NIO的实现相较于TCP而言,需要更少的线程即可满足大量的客户端连接,所以建议使用NIO协议。
  4. 当Broker的网络传输延迟较大时,建议使用NIO协议。
  5. NIO连接的URI格式:nio://hostname:port?key=value&key=value
  6. 配置:
 <broker>
  ...
  <transportConnectors>
    <transportConnector name="nio" uri="nio://0.0.0.0:61616"/>  
  </<transportConnectors>
  ...
</broker>

四. UDP

  1. UDP和TCP的区别: TCP是一个原始流传输协议,意味着数据传输是有保证的,不会出现重复或者丢失的情况。而UDP则无法保证数据的可靠性传输。
  2. UDP的URI格式:udp://hostname:port?key=value&key=value

五. SSL

  1. ActiveMQ支持将NIO和SSL协议结合使用,可以在NIO通信的基础上实现安全地连接。配置如下:
<broker>
  ...
  <transportConnectors>
    <transportConnector name="nio+ssl" uri="nio+ssl://0.0.0.0:61616"/>  
  </<transportConnectors>
  ...
</broker>

六. 其他协议

  1. 其他协议如HTTP/HTTPS和VM等,在实际生产环境下使用较少,这里不再赘述,有兴趣可以参考官网的介绍:http://activemq.apache.org/configuring-version-5-transports.html