文章目录
ActiveMQ的传输协议
ActiveMQ支持的client-broker通讯协议有:
其中配置Transport Connector的文件在${ActiveMQ_HOME}/conf/activemq.xml中的标签之内。
官方文档地址: http://activemq.apache.org/configuring-version-5-transports.html
1、 Transmiss Control Protocol(TCP)默认
1.TCP是ActiveMQ默认的协议,监听端口是61616
2.配置是:(存放在transportConnector 内)
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
3.网络传输数据前,必须要序列化数据,消息通过一个叫wire protocol的序列化成字节流。
默认请看清下ActiveMQ把wire protocol命名为openwire
4.TCP传输的特点:
TCP协议传输可靠性高,稳定性强
高效率,字节流方式传递,效率高
有效性、可用性:应用广泛,支持任何平台
2、New I/O API Protocol (更好的性能)
1) NIO协议和TCP协议类似但是NIO更侧重于底层的访问操作,它允许开发人员对同一资源可有更多的client调用和服务端有更多的负载
2)适合使用NIO协议的场景:
- 可能有大量和的client去连接到Broker上,一般情况下,大量的Client去连接Broker是被操作系统的线程所限制的,因此,NIO的实现比TCP需要更少的线程去运行,所以建议使用NIO协议
- 可能对于Broker有一个很迟钝的网络传输,NIO比TCP提供更好的性能。
NIO配置示例:
<transportConnector name="nio" uri="tcp://0.0.0.0:61618?trace=true"/>
连接地址的协议改为: nio://ip:61618
,例如:nio://192.168.25.134:61616
NIO协议案例增强
- 问题:URI格式以nio开头,表示这个端口使用以TCP协议为基础的NIO网络IO协议,但是这样的设置方式,只能使这个端口支持Openwire协议。
- 如果我们需要一个端口来支持NIO网络IO协议,同时又支持多个协议。
解决方法:使用auto
关键自使用“+
”符号来为端口设置多种特性。
更多资料查看:ActiveMq关于NIO的自动配置
<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61608"/>
为了进一步优化在该配置上还会添加相应的参数,所以完整的配置是
<transportConnectors>
<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61608?maximumConnections=1000&wireFormat.maxFrameSize=104857600&
org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&org.apache.activemq.transport.nio.Se1ectorManager.maximumPoo1Size=50"/>
</transportConnectors>
说明
auto
: 针对所有的协议,他会识别我们是什么协议。nio
:使用NIO网络IO模型