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=value
Transport 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/