侧边栏壁纸
博主头像
coydone博主等级

记录学习,分享生活的个人站点

  • 累计撰写 306 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

ActiveMQ传输协议

coydone
2022-06-14 / 0 评论 / 0 点赞 / 395 阅读 / 3,154 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

简介

ActiveMQ允许客户端使用多种协议来连接,配置Transport Connector的文件在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&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>

ActiveMQ所有URI配置都基于java.net.URI类,该类不允许使用空格。因此,如果正在使用fallover:static:URI,不要在.符号周围放置任何空格。

ActiveMQ传输协议配置选项官网连接:https://activemq.apache.org/configuring-version-5-transports。

传输协议种类

TCP传输(The TCP Transport)

TCP传输允许客户端使用TCP套接字连接到远程ActiveMQ代理。这些配置选项可用于使用JMS客户端的连接URI字符串或在代理的传输连接器URI上调整客户端上的底层TCP传输。

TCP是默认的Broker配置,TCP的Client监听端口为61616。

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

TCP传输的优点:

  • TCP协议传输可靠性高,稳定性强。

  • 高效性:字节流方式传递,效率很高。

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

配置:在yaml文件中配置:

spring:
  activemq:
    broker-url: tcp://127.0.0.1:61616

NIO传输(The NIO Transport)

NIO Transport与常规TCP传输非常相似。不同之处在于它是使用NIO API实现的,它可以帮助提高性能和可扩展性,不用将Java NIO包与IBM的AIO4J包混淆。。NIO仅是服务器端传输选项。尝试在客户端使用它将实例化常规TCP传输。要从TCP切换到NIO,只需更改URI的方案部分。

这是在代理的XML配置文件中定义的示例:在conf/activemq.xml配置文件中添加nio。

<broker>
 ...
 <transportConnectors>
  <transportConnector name="nio" uri="nio://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
 </transportConnectors>
 ...
</broker>

在yaml文件中配置使用nio:

spring:
  activemq:
    broker-url: nio://127.0.0.1:61614

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

适合使用NIO协议的场景:

可能有大量的Client去连接到Broker上,一般情况下,大量的Client去连接Broker是被操作系统的线程所限制的。因此,NIO的实现比TCP需要更少的线程去运行,所以建议使用NIO协议。可能对于Broker有一个很迟钝的网络传输,NIO比TCP提供更好的性能。

注意:原始NIO传输是使用OpenWire协议的tcp传输的替代品。其他网络协议,如AMQP,MQTT,Stomp等也有自己的NIO传输实现。它通常通过在协议前缀中添加“+ nio”后缀来配置,例如mqtt+nio://localhost:1883

所有协议特定配置也应适用于NIO版本的传输。

AUTO传输

从5.13.0开始,ActiveMQ支持通过TCP,SSL,NIO和NIO SSL进行自动有线协议检测。支持OpenWire,STOMP,AMQP和MQTT。有关详细信息,请参阅AUTOTransport Reference。

开发中高并发常用nio+auto形式传输。

<transportConnector name="nio+auto" uri="nio://0.0.0.0:61618?trace=true"/>

VM传输

VM传输允许客户端在VM内相互连接,而无需网络通信的开销。使用的连接不是套接字连接,而是使用直接方法调用来启用高性能嵌入式消息传递系统。第一个使用VM连接的客户端将引导嵌入式代理。后续连接将附加相同的代理。一旦关闭了与代理的所有VM连接,嵌入式代理将自动关闭。

AMQP传输

从5.8.0开始,ActiveMQ支持AMQP。

MQTT传输

从5.6.0开始,ActiveMQ也支持MQTT。它是一种轻量级的发布/订阅消息传输。

SSL传输

这允许您使用SSL通过TCP进行通信。

NIO SSL传输

可用性:自5.6起可用。通过NIO实现SSL传输。这允许您将大量SSL客户端连接到单个代理实例。它只是服务器端传输选项。

<broker>
 ...
 <transportConnectors>
  <transportConnector name="nio+ssl" uri="nio+ssl://0.0.0.0:61616"/> 
 </transportConnectors>
 ...
</broker>
0

评论区