跳到主要内容

11、ActiveMQ 实战 - ActiveMQ的NIO协议使用

NIO协议配置

由ActiveMQ安装目录所在的/conf/activemq.xml的配置文件可知,ActiveMQ默认出厂配置并不是NIO网络模型,而是BIO网络模型,若想使用NIO网络模型,需要transportConnectors标签加入以下配置,端口可以自定义(如果不指定端口,默认使用BIO网络IO模型端口,比如OpenWire、STOMP、AMQP等):

<transportConnector name="nio" uri="nio://0.0.0.0:61618?trace=true" />

配置完后,使用命令./activemq restart重启ActiveMQ,打开控制台的Connections看到Connector NIO一栏则表示配置成功。
 
更多协议介绍参考:10.ActiveMQ的传输协议

NIO配置文件修改后,连接ActiveMQ的url由原来的tcp://your ip:61616改成nio://your ip:61618即可。

连接ActiveMQ的java代码参考:Java编码实现ActiveMQ通讯

NIO使用增强

在我们没有配置NIO时,端口使用的是以TCP为协议基础的BIO + TCP模式,当配置了NIO并且URI格式以“nio”开头后,此时端口使用的是以TCP协议为基础的NIO网络模型,即NIO + TCP
 
怎么能做到让这个端口既支持NIO网络模型,又让他支持多个协议呢(即不仅仅是TCP协议)?

1、 配置auto;
auto关键字:在NIO上启用自动检测功能(来自官方翻译)
 
在ActiveMQ安装目录所在的/conf/activemq.xml的配置文件的transportConnectors中加入以下一行配置(端口可自行指定)。

<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:5678" />

配置完后,启动ActiveMQ,并在控制台访问,在Connections菜单出现Connector auto+nio一栏则表示配置成功。
 
2、 修改连接服务的URI;
连接ActiveMQ服务的URI格式:[协议名称]://[your ip]:5678

由上一步可知,使用auto关键字配置了5678端口,当我们在5678端口使用指定的协议名称时,ActiveMQ会自动使用该协议的NIO网络不行,不再是原来的BIO网络模型,由此达到NIO网络模型支持多协议的作用。

比如当我们在5678使用TCP协议时,则URI应该配置为:tcp://your ip://5678,则此时5678使用的是以TCP协议为基础的NIO网络模型。

注:不同的网络协议使用不同的客户端代码,即jar不同,api也不同。