ActiveMQ协议详解
一. 传输协议概述
-
Connectors:ActiveMQ提供的用来实现连接通信的功能,包括Client-Broker和Broker-Broker。ActiveMQ允许客户端使用多种协议进行连接。
-
配置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&wireFormat.maxFrameSize=104857600"/> <transportConnector name="amqp" uri="amqp://127.0.0.1:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="stomp" uri="stomp://127.0.0.1:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="mqtt" uri="mqtt://127.0.0.1:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="ws" uri="ws://127.0.0.1:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> </transportConnectors>
-
ActiveMQ支持的Client-Broker通信协议如下:
- TCP:这个也是默认的通信协议
- NIO
- UDP
- SSL
- HTTP(S)
- VM:如果客户端和Broker在同一个虚拟机内运行,则可以通过VM协议进行通信,有效减少网络传输的开销。
二. TCP
- TCP是默认使用的传输协议,默认监听端口61616
- 在网络传输数据前,必须先对数据进行序列化。消息是通过一个叫wire protocol的协议被序列化成字节流的。默认情况下,ActiveMQ将wire protocol称为openwire,目的是提高网络传输效率,保证数据的快速交互。
- TCP连接的URI格式:tpc://hostname:port?key=value&key=value。(加粗部分为必须的)
- TCP传输的优点
- 可靠性高,稳定性强
- 以字节流方式传递,效率高
- 应用广泛,支持任何平台
- 所有关于Transport协议的可配置参数,可以参考官网:http://activemq.apache.org/configuring-version-5-transports.html
三. NIO
-
NIO协议和TCP类似,但是NIO更侧重于底层的访问操作。它允许开发人员对同一资源可以有更多的Client端调用,并且服务端可以承担更多的负载。
-
NIO协议适用的场景:
-
可能有大量的Client去连接Broker
一般情况下,受到操作系统线程数量的限制,Broker无法承载过多的Client连接。NIO的实现相较于TCP而言,需要更少的线程即可满足大量的客户端连接,所以建议使用NIO协议。
-
当Broker的网络传输延迟较大时,建议使用NIO协议。
-
NIO连接的URI格式:nio://hostname:port?key=value&key=value
-
配置:
<broker> ... <transportConnectors> <transportConnector name="nio" uri="nio://0.0.0.0:61616"/> </<transportConnectors> ... </broker>
四. UDP
-
UDP和TCP的区别:
TCP是一个原始流传输协议,意味着数据传输是有保证的,不会出现重复或者丢失的情况。而UDP则无法保证数据的可靠性传输。
-
UDP的URI格式:udp://hostname:port?key=value&key=value
五. SSL
-
ActiveMQ支持将NIO和SSL协议结合使用,可以在NIO通信的基础上实现安全地连接。配置如下:
<broker> ... <transportConnectors> <transportConnector name="nio+ssl" uri="nio+ssl://0.0.0.0:61616"/> </<transportConnectors> ... </broker>
六. 其他协议
- 其他协议如HTTP/HTTPS和VM等,在实际生产环境下使用较少,这里不再赘述,有兴趣可以参考官网的介绍:http://activemq.apache.org/configuring-version-5-transports.html