ActiveMQ支持的消息协议

ActiveMQ支持哪些协议

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

ActiveMQ的协议连接配置

在ActiveMQ安装目录的/conf/activemq.xml文件中,通过配置transportConnectors就可以使用多种传输方式。官方的配置文档:http://activemq.apache.org/configuring-transports

ActiveMQ支持的消息协议_第1张图片

ActiveMQ常用的传输方式及配置

TPC:由于TCP具有可靠传输的特性,它在ActiveMQ中也是最常使用的一种协议。默认的配置中,TCP连接的端口为61616.
TCP配置格式:tcp://hostname:port?key=value
TCP配置参数说明:在服务端配置时,参数要以“transport.”开头,在客户端连接时,参数省略“transport.”前缀
TCP服务端配置示例:tcp://localhost:61616?transport.trace=false&transport.soTimeout=6000
TCP客户端示例:tcp://localhost:61616?trace=false&soTimeout=6000
TCP配置参数说明:

属性 默认值 描述
backlog 5000 指定传输服务器套接字等待接受的最大连接数
connectionTimeout 30000 超时时间(单位为毫秒),>=1才有超时时间,为0表示没有超时,负值被忽略
daemon false 如果为true,则传输线程将以守护进程模式允许。将代理嵌入Spring容器或Web容器中时,将此参数设置为true,以允许容器正确关闭
dynamicManagement false 如果为true,则可以通过JMX管理TransportLogger
ioBufferSize 8 x 1024 协议解析使用的缓冲区大小。(非TCP缓冲区)
jmxport 1099 JMX端口(仅在客户端有效)
keepAlive false 如果为true,则在Boker连接上启用TCP KeepAlive,以防止连接在TCP级别超时。不要和InactivityMontior使用的KeepAliveInfo消息混淆
maximumConnections Integer.MAX_VALUE broker允许的最大socket数量
socketBufferSize 64 x 1024 设置接受的套接字读写缓冲区的大小(以字节为单位)
soLinger Integer.MIN_VALUE 当值>-1时,设置套接字的选项soLinger,设置为-1时,将禁用soLinger套接字选项
soTimeout 0 设置套接字的读取超时(以毫秒为单位),为0表示没有超时
soWriteTimeout 0 设置套接字的写入超时(以毫秒为单位),为0表示没有超时
stackSize 0 设置服务端后台读取线程的堆栈大小,必须以128k的倍数指定,为0表示忽略此参数
startLogging true true,将传输信息TransportLogger对象写入日志,仅在trace=tue的场景下生效
tcpNoDelay false 如果为true,则设置套接字的选项TCP_NODELAY。这就会禁用Nagle的小数据包传输算法
threadName N/A 指定调用transport的线程名称。例如以服务器host命名,调试线程的时候可以看到
trace false 为true时,服务器记录传输发送的所有命令内容。
trafficClass 0 IP协议级别的服务质量参数(0x02,0x04,0x08,0x10)
useInactivityMonitor true false,则禁用InactivityMonitor,连接永远不会超时
useKeepAlive true true,在空闲连接上发送KeepAliveInfo消息,防止它超时。false,指定的时间内没有收到数据,连接超时

SSL:需要一个安全连接的时候可以考虑使用SSL,适用于client和broker在公网的情况
SSL配置格式:ssl://hostname:61616
SSL客户端配置:JMX客户端需要使用ActiveMQSslConnectionFactory类创建连接,brokerUrl以ssl://开头
SSL主机名验证:从ActiveMQ 5.15.6开始,ActiveMQ开始支持TLS主机名验证,默认情况下客户端启用了该验证,而服务端没有启用。服务端配置为 ssl://localhost:61616?transport.verifyHostName=true 客户端配置为 ssl://localhost:61616?verifyHostName=false

NIO: 使用Java的NIO方式对连接进行改进,因为NIO使用线程池,可以复用线程,所以可以用更少的线程维持更多的连接。如果有大量客户端,或者性能瓶颈在网络传输上,可以考虑使用NIO的连接方式
NIO配置格式:nio://hostname:port?key=value
NIO是OpenWire协议的传输方式,其他协议,像AMQP,MQTT,STOMP也有NIO的实现,通常在协议前缀中加“+nio”来区分,如:mqtt+nio://localhost:1883
NIO传输线程使用配置:从5.15.0开始,ActiveMQ支持调整NIO的传输线程,可以设置以下属性

属性 默认值 说明
org.apache.activemq.transport.nio.SelectorManager.corePoolSize 10 核心线程池线程数
org.apache.activemq.transport.nio.SelectorManager.maximumPoolSize 1024 线程池最大线程数
org.apache.activemq.transport.nio.SelectorManager.workQueueCapacity 0 线程池队列容量
org.apache.activemq.transport.nio.SelectorManager.rejectWork false 当达到容量时,允许使用IOException拒绝工作,以便保留现有的QOS

NIO传输线程使用情况配置:属性可以在ActiveMQ安装目录/bin/env中配置,如:

ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS -Dorg.apache.activemq.transport.nio.SelectorManager.corePoolSize=2000 -Dorg.apache.activemq.transport.nio.SelectorManager.maximumPoolSize=2000 -Dorg.apache.activemq.transport.nio.SelectorManager.workQueueCapacity=1024"

NIO+SSL:从ActiveMQ 5.6版本开始,NIO可以支持和NIO搭配使用的传输连接,格式为nio+ssl://0.0.0.0:61616

UDP:与面向连接,可靠的字节流服务的TCP不同,UDP是一个面向数据的简单传输连接,没有TCP的三次握手,所以性能大大强于TCP,但是是以牺牲可靠性为前提,适用于丢失也无所谓的消息。
UDP配置格式:udp://localhost:8123
UDP配置参数说明:

属性 默认值 说明
trace false 为true时,将记录传输发送的所有命令
useLocalHost true 为true时,本机机器名被解析为localhost
datagramSize 4 x 1024 指定数据报的大小

HTTP(S):需要穿越防火墙,可以考虑使用HTTP(S),但由于HTTP(S)时短连接,每次创建连接的成本较高,所以性能最差。通过XML传输数据。
HTTP(S)配置格式:http(s): //localhost:8080?param1=value1¶m2=value2

VM:虚拟机协议(方法直调),使用场景是client和broker在同一个Java虚拟机内嵌的情况,无需网络通信的开销。
VM配置格式:vm://brokerName?marshal=false&broker.persistent=false
VM配置参数说明:

属性 默认值 说明
create true 如果不存在,则创建broker
waitForStart -1 如果>0,则表示等待代理启动的超时(以毫秒为单位)。值-1和0表示不等待。仅在ActiveMQ 5.2+支持
wireFormat default 命令的组装格式(协议)
marshal false 强制发送的每个命令使用WireFormat进行格式转换

OpenWire协议

OpenWire协议是Apache一种跨语言的协议,允许从不同的语言和平台访问ActiveMQ,是ActiveMQ 4.x以后的版本默认的传输协议。

Open Wire支持TCP,SSL,NIO,UDP,VM等传输方式,直接配置这些连接,就是使用的OpenWire协议,OpenWire有自己的配置参数,客户端和服务端配置的参数名通过前缀“wireFormat.”表示。如:tcp://localhost:61616?wireFormat.cacheEnabled=false

OpenWire的配置参数说明:

属性 默认值 说明
stackTraceEnabled true 是否应该把已经发生并且追踪到的堆栈异常,通过broker发送到客户端
tcpNoDelayEnabled true socket的NoDelay参数
cacheEnabled true 如果不断重复的值进行缓存,以便少编组(马上要进行的发送)发送
tightEncodingEnabled true 根据CPU使用情况,自动调整传输内容大小(压缩比列)
prefixPacketSize true 在每个包被编组前(马上要被发送),每个包的大小是否应该作为前缀
maxInactivityDuration 30000 连接的最大空闲时间,单位为毫秒。broker服务会根据配置关闭超时的连接,同时也可以通过心跳机制来保持连接,值<=0则禁用活动连接的检测
maxInactivityDurationInitalDelay 10000 连接建立之后多久进行超时检测
cacheSize 1024 如果能被缓存,那么这个规定了缓存的最大数量,在ActiveMQ 4.1开始使用
maxFrameSize MAX_LONG 可发送最大帧大小,可以帮助防止OOM DOS攻击

MQTT协议

MQTT(Message Queue Telemetry Transport)消息队列遥测传输,是IBM开发的一个即时通讯协议,已成为物联网通信的标准。

MQTT的结构简单,相对于其他协议,它更加轻量级。适合在计算能力有限,低带宽,不可靠的网络环境使用。

MQTT的发布订阅模型:
ActiveMQ支持的消息协议_第2张图片

服务质量(QoS)级别是一种关于发生者和接收者之间信息投递的保证协议。MQTT中有三种QoS级别:至多一次(level 0),至少一次(level 1),只有一次(level 2)
QoS是MQTT的一个主要功能,它使得在不可靠的网络下进行通信变得简单,因为即便是在非常不可靠的网络下,协议也可以掌控是否需要重发消息并保证消息到达。它也能帮助客户端根据网络环境和程序逻辑来自由选择QoS

AUTO协议

AUTO,自动检测协议,从ActiveMQ 5.13.0开始,ActiveMQ开始支持协议格式检测,可以自动检测OpenWire,STOMP,AMQP和MQTT,允许这四种类型的客户端共享一个传输。
配置示例:auto://loacalhost:5671 ,auto+nio+ssl://localhost:5671
ActiveMQ支持的消息协议_第3张图片

你可能感兴趣的:(ActiveMQ)