【ActiveMQ】之传输协议的修改和配置

系统管理员 2023-02-27 15:58 17阅读 0赞

ActiveMQ 传输协议和端口定义在 conf 目录下的 activemq.xml 文件中,打开该文件找到如下代码:

  1. <transportConnectors>
  2. <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
  3. <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
  4. <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
  5. <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
  6. <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
  7. <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
  8. </transportConnectors>

从中我们可以看出 ActiveMQ 支持多种传输协议,包括 openwire 即默认的 tcp 的传输协议,amqp、stomp、mqtt、ws 等协议,这些协议都是基于 tcp 的 BIO(blocking io ) 传输协议。

现在我们给配置文件添加一个 NIO 协议,端口改为 61618:

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

然后就可以在代码中修改使用了:

  1. // 基于 tcp 的传输协议
  2. public static final String ACTIVEMQ_URL = "tcp://localhost:61616";
  3. public static final String QUEUE_NAME = "tcp-queue";
  4. // 基于 nio 的传输协议
  5. public static final String ACTIVEMQ_URL = "nio://localhost:61618";
  6. public static final String QUEUE_NAME = "nio-queue";

其实 NIO 底层也是 tcp 实现的,不过现实的原理是非阻塞的。并且我们实际开发中我们都是需要让某个端口即支持 NIO 网络的 IO 模型,同时也应该支持其它 BIO 的网络 IO 模型。

为了解决这个问题,官网为我们实现了 auto 这个关键字,auto 表示支持同时 openwire、amqp、stomp、mqtt 这四种协议。而通过 auto 和 “+” 符号来为端口设置多种特性,比如我们以 61608 端口为例:

  1. <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 即可):

  1. // 支持 tcp
  2. public static final String ACTIVEMQ_URL = "tcp://localhost:61608";
  3. public static final String QUEUE_NAME = "autonio";
  4. // 同时也支持 nio
  5. public static final String ACTIVEMQ_URL = "nio://localhost:61608";
  6. public static final String QUEUE_NAME = "autonio";

发表评论

表情:
评论列表 (有 0 条评论,17人围观)

还没有评论,来说两句吧...

相关阅读