【ActiveMQ】协议了解

作者: 佐蓝Gogoing | 来源:发表于2019-06-23 18:11 被阅读13次

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

    1. 协议连接配置

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

    <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"/>
        <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>
    

    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】协议了解

        本文链接:https://www.haomeiwen.com/subject/qviiqctx.html