ActiveMQ学习四:AvtiveMQ的传输协议
网站首页 文章专栏 ActiveMQ学习四:AvtiveMQ的传输协议
ActiveMQ学习四:AvtiveMQ的传输协议
编辑时间:2019-08-01 11:49 作者:毛毛小妖 浏览量:38 评论数:0

我们在前面的介绍中,看到我们配置的连接地址是这样的:tcp://10.1.241.26:61616。这是activeMQ默认的传输协议,其实activeMQ还支持很多协议的。

我们可以打开activeMQ的官网https://activemq.apache.org/configuring-version-5-transports.html来查看支持的协议类型。

一、几个题目

先来看几个问题:

1,默认的61616端口如何修改?

2,生产上的连接协议如何配置的,默认使用tcp吗?

如果看过了本文,大家就知道问题的答案了,所以一步一步来吧。

二、activeMQ支持的协议有哪些

activeMQ支持的通信协议不仅只有这个,还有其他6中。其中配置这些协议的文件在ActiveMQ安装目录的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&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
 </transportConnectors>

在上述的配置中,

uri描述信息的头部都是采用协议的名称,比如:

描述amqp协议的监听端口时,采用的uri描述信息为“amqp://......”,

描述stomp协议的监听端口时,采用的uri描述信息为“stomp://......”。

唯独在进行openwire协议描述时,uri却采用“tcp://......”。这是因为ActiveMQ默认的协议就是openwire

三、协议的详细介绍

activeMQ支持的协议有7中,红色标注的是重点的,其他几个了解即可,分别是:

1,Transmission Control Protocal(TCP)默认

    1>这是默认的Broker配置,tcp的监听端口是61616

    2>网络数据传输钱,必须要序列化数据,消息是通过一个叫wire protocal的来序列化成字节流。默认情况下ActiveMQ把wire protocal叫做OpenWire,他的目的是促使网络上的效率和数据快速交互。

    3>tcp连接的uri形式如:tcp://hostname:port?key=value,后面的参数是可选

    4>tcp传输的优点:

        a,TCP传输可靠性高,稳定性强

        b,高效性:字节流传输,效率很高

        c,有效性、可用性:应用广泛,支持任何平台

    5>关于transport协议的可配置参数可以参考官网:https://activemq.apache.org/configuring-version-5-transports.html

2,New I/O Protocal(NIO)

    1>NIO协议和TCP协议类似但NIO更侧重于底层的访问操作。它允许开发人员对同一资源可有更多的client调用和服务端有更多的负载。

    2>适合使用NIO的场景

        a,可能有大量的client连接到Broker上,一般情况下,大量的连接是被操作系统所限制的。因此,NIO的实现比TCP需要更少的线程,所以建议使用NIO协议。

        b,可能对于Broker有一个很迟钝的网络传输,NIO比TCP提供更好的性能。

    3>NIO连接的uri形式:nio://hostname:port?key=value

3,AMQP协议:略

4,stomp协议:略

5,SSL协议:略

6,mqtt协议:略

7,ws协议:略

四、NIO案例演示

1,修改配置文件

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&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="nio" uri="nio://0.0.0.0:61618?trace=true"/>
 </transportConnectors>

2,生产者和消费者代码修改

只需要把相应的连接修改成:nio://ip:61618即可,其他的不用动

五、NIO增强案例演示

除了NIO这个高效的协议外,activeMQ还对所有协议进行了优化,提供了增强型NIO。这个模式,让这个端口既支持NIO网络模型,又支持多个协议。其实就是使用auto关键字,相当于把所有协议封装起来,只暴露一个端口,使得使用起来更加灵活,用起来也很简单:

1,修改配置文件

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&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="nio" uri="nio://0.0.0.0:61618?trace=true"/>
            <transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:5671"/>
 </transportConnectors>

2,生产者和消费者代码修改

在java中使用只需要把相应的连接修改成:nio://ip:5671或者tcp://ip:5671即可。端口都是一个,我们可以灵活切换各种协议

所以实际使用中,最好使用nio模式,这样效率会更高。

推荐文章
来说两句吧
最新评论
    还没有人评论哦,快来坐沙发吧!