传输协议
ActiveMQ 支持的协议:TCP 、 UDP、NIO、SSL、HTTP(S) 、VM
一般常用TCP和NIO
在activemq/conf/activemq.xml中可以进行配置
默认使用的是第一个 openwire 也就是 tcp 连接
默认的Broker 配置,TCP 的Client 监听端口 61616 ,在网络上传输数据,必须序列化数据,消息是通过一个 write protocol 来序列化为字节流。默认情况 ActiveMQ 会把 wire protocol 叫做 Open Wire ,它的目的是促使网络上的效率和数据快速交互 。
1、TCP传输协议
使用tcp的语法:tcp://hostname:port?key=value
具体的参数可选,可以参考官网:https://activemq.apache.org/tcp-transport-reference
2、NIO传输协议
NIO协议为ActiveMQ提供了更好的性能
连接形式:nio://hostname:port?key=value
这个需要在activemq.xml中配置
<transportConnector name="nio" uri="nio://0.0.0.0:61618?trace=true"/>
配置完成后重启mq,可以看到这里会多一个nio的连接协议
使用nio协议,我们只需要把连接的url改为nio的就可以了,代码和tcp的一样
//public static final String ACTIVEMQ_URL = "tcp://xxx.xxx.xxx.xxx:61616";
public static final String ACTIVEMQ_URL = "nio://xxx.xxx.xxx.xxx:61618";
3、NIO增强
URI 格式以 nio 开头,表示这个端口使用 tcp 协议为基础的NIO 网络 IO 模型,但这样设置让它只支持 tcp 、 nio 的连接协议。如何让它支持多种协议?
这里要用到auto的方式,它可以支持 STOMP、 AMQP MQTT、 TCP、 NIO 多种协议
用法:
还是在activemq.xml中配置
<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"/>
同样这里会多出一个连接协议
代码也只需要修改url即可
public static final String ACTIVEMQ_URL = "nio://192.168.24.132:61608";
注意:
这里只针对于TCP和NIO协议的代码相同,但不代表其他协议的代码也相同,因为底层的配置不同,所以在使用其他协议时需要修改除url以外的其他代码
各种协议的对比:
http://activemq.apache.org/configuring-version-5-transports.html