【ActiveMQ】协议了解

ActiveMQ 支持多种协议和传输方式,允许客户端使用多种协议连接。
支持的协议:AUTO、OpenWire、AMQP、Stomp、MQTT等
支持的基础传输方式:VM、TCP、SSL、UDP、Peer、Multicast、HTTP(S) 等
支持的高级传输方式:Failover、Fanout、Discovery、ZeroConf

1. 协议连接配置

配置文件:${ACTIVEMQ_HOME}/conf/activemq.xml
通过配置 就可以使用多种传输方式


    
    
    
    
    
    

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=truessl://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

配置参数


你可能感兴趣的:(【ActiveMQ】协议了解)