ActiveMQ

传输协议

ActiveMQ支持clientBroker的通讯协议有:TCPNIOUDPSSLHttp(s)VM

其中配置Transport Connector的文件在ActiveMQ的安装目录的conf/activemq.xml中的<transportConnectors>标签中。

1
2
3
4
5
6
7
8
9
<!--配置传输官网 http://activemq.apache.org/configuring-transports.html-->
<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&amp;wireFormat.maxFrameSize=104857600&trace=true"/>
    <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
</transportConnectors>

activemq-14

TCP协议

ActiveMQ中默认的消息协议就是openwire,也就是Transmission Control Protocal(TCP)协议。

  1. 这是默认的Broker配置,TCPClient监听端口61616

  2. 在网络传输数据前,必须要序列化数据,消息是通过一个叫wire protocol的来序列化成字节流。

    默认情况下ActiveMQwire protocol叫做OpenWire,它的目的是促使网络上的效率和数据快速交互。

  3. TCP连接的URI形式如:tcp:hostname:port?key=value&key=value,后面的参数是可选的

  4. TCP传输的优点:

    • TCP协议传输可靠性高,稳定性强
    • 高效性:字节流方式传递,效率很高
    • 有效性、可用性:应用广泛,支持任何平台
  5. 关于Transport协议的可配置参数可以参考官网

NIO协议

  1. New I/O API Protocol(NIO),和TCP协议类似但NIO侧重底层的访问操作。它允许开发人员对统一资源可有更多的client调用和服务端有更多的负载。

  2. 适合NIO协议的场景:

    • 可能有大量的Client去连接到Broker上,一般情况下,大量的Client去连接Broker是被操作系统的现成所限制的。因此,NIO的实现比TCP需要更少的线程去运行,工作中常用NIO协议,建议使用NIO协议
    • 可能对于Broker有一个很迟钝的网络传输,NIOTCP提供更好的性能。
  3. NIO连接的URI形式:nio://hostname:port?key=value

  4. 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,是流文本定向消息协议,是一种为MOMMessage Oriented Middleware,面向消息的中间件)

设计的简单文本协议。

SSL协议

Secure Sockets Layer ProtocolSSL)安全加固协议

MQTT协议

MQTTMessage 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
2
3
<transportConnectors>
<transportConnector name="nio" uri="nio://0.0.0.0:61618?trace=true"/>
</transportConnectors>

当配置了activemq.xml配置了NIO协议之后,项目中的配置broker-url= nio://192.168.1.132:61618后,表示61618端口使用以TCP协议为基础的NIO网络IO模型。

但是这样的设置智能使这个端口支持Openwire协议,那么我们怎么既让这个端口支持NIO网络IO模型,又让它支持多个协议呢?

activemq-15

可以通过使用auto关键字,组合+符号来为端口设置多种特性,达到基于NIO网络IO模型支持多种协议。

1
<transportConnector name="auto+nio" uri="auto+://0.0.0.0:61608?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600&amp;org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&amp;org.apache.activemq.transport.nio.SelectorManager.maxmumPoolSize=50"/>

最后更新: 2020年11月12日 12:20

原始链接: https://midkuro.gitee.io/2020/05/23/activemq-protocol/

× 请我吃糖~
打赏二维码