ActiveMQ学习笔记(六)—— 传输协议

传输协议

ActiveMQ默认传输协议为TCP,即我们示例中使用的tcp://192.168.1.3:61616,可以在ActiveMQ安装目录conf/activemq.xml找到其配置文件

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

从配置文件可以看出有多种协议,每种协议有着不同的使用场景,另外协议后面还以跟参数&key=value,具体可以参考官方文档 http://activemq.apache.org/configuring-transports.html 配置传输。为什么tcp的name=openwire?在tcp传输数据前,必需要序列化数据,消息是通过一个叫wire protocol来序列化成字节流。所以activemq的默认协议取名叫openwire

使用nio提高传输性能

官方使用的这些传输协议使用的是bio,关于bio、nio这里不做介绍。如果要使用nio,需要追加配置。

<transportConnectors>
            <transportConnector name="nio" uri="nio://0.0.0.0:61618"/> <!-- tcp的nio -->
<transportConnector name="mqtt+nio" uri="mqtt+nio://0.0.0.0:61618"/> <!-- 其他协议的nio使用 -->
        </transportConnectors>

//替换为nio
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("nio://192.168.1.3:61618");

自动适配协议

从5.13.0版开始,ActiveMQ支持wire format protocol(这个东东不知道怎么理解官方原话)检测。可以自动检测OpenWire,STOMP,AMQP和MQTT。这样就可以为所有4种类型的客户端共享一种传输方式。怎么理解?就好比一个盒子上集成了多种协议:usb、hdmi、type-c等等;但是盒子本身只有一个端口,当接上盒子后,盒子会自动检查你使用的什么协议传输。官方文档http://activemq.apache.org/auto

<transportConnector name="auto" uri="auto://0.0.0.0:5671"/>                   <!-- 自动检测协议 -->
<transportConnector name="auto+ssl" uri="auto+ssl://0.0.0.0:5671"/>           <!-- auto+ssl -->
<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:5671"/>           <!-- auto+nio -->
<transportConnector name="auto+nio+ssl" uri="auto+nio+ssl://0.0.0.0:5671"/>   <!-- auto+nio+ssl -->

<!-- 仅针对tcp或nio -->
<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:5671?auto.protocols=default&amp;maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
//只要端口好写对,会自动检查协议的
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.1.3:5671");

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("nio://192.168.1.3:5671");
发布了64 篇原创文章 · 获赞 0 · 访问量 3209

猜你喜欢

转载自blog.csdn.net/q42368773/article/details/103190256
今日推荐