ActiveMQ 支持多种协议和传输方式,允许客户端使用多种协议连接。
支持的协议:AUTO、OpenWire、AMQP、Stomp、MQTT等
支持的基础传输方式:VM、TCP、SSL、UDP、Peer、Multicast、HTTP(S) 等
支持的高级传输方式:Failover、Fanout、Discovery、ZeroConf
1. 协议连接配置
配置文件:${ACTIVEMQ_HOME}/conf/activemq.xml
通过配置 <transportConnectors>
就可以使用多种传输方式
<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>
2. 传输方式配置
3.1 TCP
- TCP 具有可靠传输的特性,是最常使用的一种协议。在默认配置中,连接端口为:61616。
- TPC 配置格式:
tcp://hostname:port?key=value
TCP 参数配置说明
服务端配置时,参数要以transport.
开头
客户端配置时,参数省略transport.
前缀
服务端配置示例:tcp://localhost:61616?transport.threadName&transport.trace=false&transport.soTimeout=6000
客户端配置示例:tcp://localhost:61616?threadName=false&transport.soTimeout=6000
参数列表
3.2 SSL
- 需要一个安全连接的时候可以考虑使用 SSL,适用于 client 和 broker 在公网的情况。
- SSL 配置格式:
ssl://hostname:port?key=value
可配置参数和 TCP 相同
客户端使用 ActiveMQSslConnectionFactory
类创建
SSL 主机名验证
从 ActiceMQ 5.15.6 开始,支持 TLS 主机名验证,默认情况下,客户端启用了该验证,而服务端没有启用
服务端配置:ssl://localhost:61616?transport.verifyHostName=true
客户端配置:ssl://localhost:61616?verifyHostName=true
或 ssl://localhost:61616?socket.verifyHostName=true
3.3 NIO
ActiveMQ 默认使用 BIO 连接,如果有大量的客户端,或者瓶颈在网络传输上,可以考虑使用 NIO。
NIO 格式配置,可配置参数和 TCP 相同
nio://hostname:port?key=value
NIO 默认是 OpenWire 协议的传输方式,其他协议如需使用 NIO 通常在协议前缀中加 +nio
区分。如:
mqtt+nio://hostname:port?key=value
ActiveMQ 从 5.15.0 开始,支持调整 NIO 的传输线程
属性可以在 ${ACTIVEMQ_HOME}/bin/env
中配置
ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS_MEMORY -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=$ACTIVEMQ_CONF/login.config"
3.4 UDP
UDP 是一个面向数据的简单传输连接,没有 TCP 的三次握手,性能大大强于 TCP,但是以牺牲可靠性为前提,适用于丢失也无所谓的消息。
UDP 配置格式
udp://loaclhot:8123
UDP 配置参数
3.5 HTTP(S)
需要穿越防火墙,可以考虑使用 HTTP(S) ,但由于是短连接,每次创建连接的成本较高,所以性能最差。通过 XML 传输数据。
HTTP 配置格式:
http://localhot:8080?key=value
HTTPS 配置格式:
https://localhot:8080?key=value
3.6 VM
虚拟机协议(方法直调),使用场景是 client 和 broker 在同一个 Java 虚拟机内嵌的情况,无需网络通信开销。像是 SpringBoot 内嵌一个Tomcat 一样。
VM 配置格式:
vm://brokerName?marshal=false&broekr.persistenet:false
VM 配置参数
3. OpenWire 协议
OpenWire 是 Apache 的一种跨语言协议,允许从不同的语言和平台访问 ActiveMQ,是 4.x 版本以后默认的传输协议。
OpenWire 支持 TCP、SSL、NIO、UDP、VM 等传输方式,直接配置这些连接,默认使用的就是 OpenWire 协议,OpenWire 有自己的配置参数,客户端和服务端配置的参数名,通过前缀wireFormat.
表示。示例:
tcp://localhot:61616?wireFormat.cacheEnabled=false&wireFormat.lightEncodingEnabled=false
配置参数
网友评论