简介
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&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>
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&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>
评论区