【ActiveMQ】之传输协议的修改和配置
ActiveMQ 传输协议和端口定义在 conf 目录下的 activemq.xml 文件中,打开该文件找到如下代码:
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
从中我们可以看出 ActiveMQ 支持多种传输协议,包括 openwire 即默认的 tcp 的传输协议,amqp、stomp、mqtt、ws 等协议,这些协议都是基于 tcp 的 BIO(blocking io ) 传输协议。
现在我们给配置文件添加一个 NIO 协议,端口改为 61618:
<transportConnector name="nio" uri="nio://0.0.0.0:61618?trace=true"/>
然后就可以在代码中修改使用了:
// 基于 tcp 的传输协议
public static final String ACTIVEMQ_URL = "tcp://localhost:61616";
public static final String QUEUE_NAME = "tcp-queue";
// 基于 nio 的传输协议
public static final String ACTIVEMQ_URL = "nio://localhost:61618";
public static final String QUEUE_NAME = "nio-queue";
其实 NIO 底层也是 tcp 实现的,不过现实的原理是非阻塞的。并且我们实际开发中我们都是需要让某个端口即支持 NIO 网络的 IO 模型,同时也应该支持其它 BIO 的网络 IO 模型。
为了解决这个问题,官网为我们实现了 auto 这个关键字,auto 表示支持同时 openwire、amqp、stomp、mqtt 这四种协议。而通过 auto 和 “+” 符号来为端口设置多种特性,比如我们以 61608 端口为例:
<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61608?maximumConnections=1000&wireFormat.maxFrameSize=104857600&org.apache.activemq.transport.nio.SeletorManager.corePoolSize=20&org.apache.activemq.transport.nio.SeletorManager.maximumPoolSize=50"/>
从配置文件中我们可以看出 url 使用的是 auto+nio,表示该端口支持 auto 的四大类型和 nio 类型。
配置好后这个端口在使用的时候就可以切换不同的协议(只需要协议的对应端口为我们配置的 auto 端口 61608 即可):
// 支持 tcp
public static final String ACTIVEMQ_URL = "tcp://localhost:61608";
public static final String QUEUE_NAME = "autonio";
// 同时也支持 nio
public static final String ACTIVEMQ_URL = "nio://localhost:61608";
public static final String QUEUE_NAME = "autonio";
还没有评论,来说两句吧...