ActiveMQ 的传输协议机制
ActiveMQ 通过网络连接器这种连接机制来实现客户端与服务端之间的通信,ActiveMQ支持的传输协议在activeMQ 安装目录的 conf/activemq.xml中的<transportConnectors>标签之内。
ActiveMQ 支持的 client 端和 broker 端的通讯协议有:TCP、NIO、UDP、SSL、Http(s)、VM。
1、TCP 协议
TCP 协议是 ActiveMQ 默认的 Broker 配置,TCP 的 Client 监听端口 61616,连接的URI格式为
tcp://hostname:port?key=value&key=value
问号后面的参数是可选的
使用该协议,在网络传输数据前,必须要实现序列化,消息是通过一个叫 wire protocol 的来序列化成字节流。默认情况下,ActiveMQ 把wire protocol 叫做OpenWire。
activemq.xml 中的配置示例:
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600" />
TCP传输的优点:
TCP协议传输可靠性高,稳定性强
字节流方式传递,效率很高
应用广泛,支持任何平台
2、NIO 协议
NIO 协议和 TCP 协议类似,但 NIO 更侧重于底层的访问操作,它允许开发人员对同一资源可有更多的 client 调用和服务端有更多的负载,NIO 的性能比 TCP 更好,因此建议使用 NIO 协议。NIO 连接的 URI 格式为:
nio://hostname:port?key=value&key=value
问号后面的参数是可选的
适合使用NIO协议的场景:
可能有大量的Client去链接到Broker上一般情况下,大量的Client去链接Broker是被操作系统的线程数所限制的。因此, NIO的实现比TCP需要更少的线程去运行,所以建议使用NIO协议
可能对于Broker有一个很迟钝的网络传输NIO比TCP提供更好的性能
activemq.xml 中的配置示例,定义一个 NIO 协议监听 61618 端口
<transportConnector name="nio" uri="nio://0.0.0.0:61618?maximumConnections=1000&wireFormat.maxFrameSize=104857600" />
其他的协议项目中一般不用,这里就不做介绍了。