前面配置文件中的nio是以TCP协议为基础的NIO网络IO模型,但是这样的配置,只能使这个端口支持Openwire协议。怎么让这个端口支持NIO网络IO模型,又支持多个协议呢?
使用命令./activemq stop停止ActiveMQ。进入config目录下,修改activemq.xml配置文件。去掉之前的nio配置,加上这一行配置。
<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61608?maximumConnection=1000&wireFormat.maxFrameSize=104857600&org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&org.apache.activemq.transport.nio.SelectorManager.maximumPoolSize=50"/>
保存并启动ActiveMQ。访问ActiveMQ的管理界面,找到Connections标签,可以看到有一个auto+nio的项,说明此时配置成功了。
下面,我们将生产者和消费者中的ACTIVEMQ_URL改成nio://hostname:61608即可运行。
如果此时,将nio改成tcp,端口号不变,保持61608,再次运行,发现还是可以正常运行的,这就是我们配置了auto的效果,ActiveMQ为我们自动适配相应的协议。
这里常用的就是TCP和NIO,其他的协议在实现的代码是不一样的,所以要用其他协议,不能直接简单的修改协议,要改动的代码还很多,这里不过多解释。