ActiveMQ
传输协议
ActiveMQ支持client和Broker的通讯协议有:TCP、NIO、UDP、SSL、Http(s)、VM。
其中配置Transport Connector的文件在ActiveMQ的安装目录的conf/activemq.xml中的<transportConnectors>标签中。
1 | <!--配置传输官网 http://activemq.apache.org/configuring-transports.html--> |

TCP协议
ActiveMQ中默认的消息协议就是openwire,也就是Transmission Control Protocal(TCP)协议。
这是默认的
Broker配置,TCP的Client监听端口61616在网络传输数据前,必须要序列化数据,消息是通过一个叫
wire protocol的来序列化成字节流。默认情况下
ActiveMQ把wire protocol叫做OpenWire,它的目的是促使网络上的效率和数据快速交互。TCP连接的URI形式如:tcp:hostname:port?key=value&key=value,后面的参数是可选的TCP传输的优点:TCP协议传输可靠性高,稳定性强- 高效性:字节流方式传递,效率很高
- 有效性、可用性:应用广泛,支持任何平台
关于
Transport协议的可配置参数可以参考官网
NIO协议
即
New I/O API Protocol(NIO),和TCP协议类似但NIO侧重底层的访问操作。它允许开发人员对统一资源可有更多的client调用和服务端有更多的负载。适合
NIO协议的场景:- 可能有大量的
Client去连接到Broker上,一般情况下,大量的Client去连接Broker是被操作系统的现成所限制的。因此,NIO的实现比TCP需要更少的线程去运行,工作中常用NIO协议,建议使用NIO协议 - 可能对于
Broker有一个很迟钝的网络传输,NIO比TCP提供更好的性能。
- 可能有大量的
NIO连接的URI形式:nio://hostname:port?key=valueTransport Conector配置示例,参考官网1
2
3
4
5
6
7<broker>
...
<transportConnectors>
<transportConnector name="nio" uri="nio://0.0.0.0:61616"/>
</transportConnectors>
...
</broker>1
2
3<transportConnectors>
<transportConnector name="nio" uri="nio://0.0.0.0:61618?trace=true"/>
</transportConnectors>
AMQP协议
即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。
STOMP协议
即Streaming Text Orientated Message Protocol,是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息的中间件)
设计的简单文本协议。
SSL协议
Secure Sockets Layer Protocol(SSL)安全加固协议
MQTT协议
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分,该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。
WS协议
Web Socket协议
ActiveMQ支持的网络协议
| 协议 | 描述 |
|---|---|
| TCP | 默认的协议,性能相对可以 |
| NIO | 基于TCP协议智商的,进行了扩展和优化,具有更好的扩展性 |
| UDP | 性能比TCP更好,但是不具备可靠性 |
| SSL | 安全链接 |
| HTTP(S) | 基于HTTP或者HTTPS |
| VM | VM本身不是协议,当客户端和代理在同一个Java虚拟机(VM)中运行时,他们之间需要通信,但不想占用网络通道,而是直接通信,可以使用该方式 |
NIO增强
1 | <transportConnectors> |
当配置了activemq.xml配置了NIO协议之后,项目中的配置broker-url= nio://192.168.1.132:61618后,表示61618端口使用以TCP协议为基础的NIO网络IO模型。
但是这样的设置智能使这个端口支持Openwire协议,那么我们怎么既让这个端口支持NIO网络IO模型,又让它支持多个协议呢?

可以通过使用auto关键字,组合+符号来为端口设置多种特性,达到基于NIO网络IO模型支持多种协议。
1 | <transportConnector name="auto+nio" uri="auto+://0.0.0.0:61608?maximumConnections=1000&wireFormat.maxFrameSize=104857600&org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&org.apache.activemq.transport.nio.SelectorManager.maxmumPoolSize=50"/> |
最后更新: 2020年11月12日 12:20
原始链接: https://midkuro.gitee.io/2020/05/23/activemq-protocol/