ActiveMQ学习笔记01 - 客户端与服务器之间的传输链接

ActiveMQ的cilent-to-broker的链接,叫作传输链接(Transport connectors),broker-to-broker间的链接,叫作网络链接(Network connectors)。spring

ActiveMQ支持许多种客户端与服务器的传输链接。分别是TCP,NIO,UDP,SSL,HTTP(S),VM,AMQP,MQTT,Peer,Multicast,WebSockets。apache

使用方法是指定链接Broker URI。URI scheme是传输链接名称,path是Broker的IP地址和端口号,另外可使用Key Value形式的Query串做为参数,如:tcp://localhost:61616?trace=true。并且各个协议之间能够组合,使用方式如:amqp+ssl://localhost:5671。安全

为ActiveMQ服务器配置多协议支持的方法是,编辑%ACTIVEMQ_HOME%conf\activemq.xml文件。此文件是ActiveMQ的配置文件。编辑<transportConnectors>节点,配置片断以下: 服务器

<transportConnectors>
    <transportConnector name="openwire" uri="tcp://localhost:61616" />
    <transportConnector name="ssl" uri="ssl://localhost:61617"/>
    <transportConnector name="stomp" uri="stomp://localhost:61613"/>
    <transportConnector name="ws" uri="ws://localhost:61614/" />
    <transportConnector name="amqp+ssl" uri="amqp+ssl://localhost:5671/" />
</transportConnectors>

其中name和uri必须惟一。这样ActiveMQ的Broker就开启的不一样的监听端口处理不一样的传输链接。不一样的传输链接的优缺点及使用场景以下:网络

TCP:ActiveMQ默认的传输链接,也是最经常使用的使用方式。长链接,每一个客户端实例都会与服务器维持一个链接。每一个链接一个线程。TCP的优势是:tcp

性能高:ActiveMQ使用默认协议OpenWire序列化和反序列化消息。OpenWire是一个性能很高的序列化协议。性能

可用性高:TCP是使用最普遍的技术,几乎全部的开发语言都支持TCP协议。单元测试

可靠性高:TCP协议确保消息不会在网络传说的过程当中丢失。测试

tcp配置:spa

<transportConnector name="tcp" uri="tcp://localhost:61616"/>

NIO:使用Java的NIO方式对链接进行改进,由于NIO使用线程池,能够复用线程,因此能够用更少的线程维持更多的链接。若是有大量的客户端,或者性能瓶颈在网络传输上,能够考虑使用NIO的链接方式。也能够根据不一样的场景选择不用的传输链接,好比:Producer有不少,可是Consumer不多,能够Producer用NIO协议,Consumer用TCP协议。从ActiveMQ 5.6版本开始,NIO能够支持和SSL搭配使用的传输链接。

nio配置:

<transportConnector name="nio" uri="nio://localhost:61616"/>

nio+ssl配置:

<transportConnector name="nio+ssl" uri="nio+ssl://localhost:61616"/>

UDP:与面向链接,可靠的字节流服务的TCP不一样,UDP是一个面向数据的简单传输链接,没有TCP的三次握手,因此性能大大强于TCP,可是是以牺牲可靠性为前提。适用于丢失也无所谓的消息,如统计uv,pv。(固然若是真是统计uv什么的,有Kafka这样专门的消息中间件)。

udp配置:

<transportConnector name="udp" uri="udp://localhost:8123"/>

SSL:须要一个安全链接的时候能够考虑使用SSL,适用于client和broker在公网的状况,如使用aws云平台等。

ssl配置:

<transportConnector name="ssl" uri="ssl://localhost:8123"/>

HTTP(S):须要穿越防火墙,能够考虑使用HTTP(S),但因为HTTP(S)是短链接,每次建立链接的成本较高,因此性能最差。

http配置:

<transportConnector name="http" uri="http://localhost:8080"/>

https配置:

<transportConnector name="https" uri="https://localhost:8080"/>

VM:勉强能够算一个协议吧。使用场景是client和broker在同一个Java虚拟机的状况。如使用代码启动嵌入式的ActiveMQ Broker实例,一般用于单元测试。由于是嵌入式,因此不须要配置ActiveMQ的配置文件,只要在链接Broker的URI种直接使用便可。vm配置:(spring配置片断)

<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" depends-on="broker">
    <property name="brokerURL" value="vm://localhost"/>
</bean>

AMQP:ActiveMQ 5.8新增长的传输链接。用于支持AMQP(高级消息队列协议)。由于AMQP是消息队列的标准协议,并且已经愈来愈被普遍使用,因此ActiveMQ也支持了此协议。AMQP协议能够搭配NIO或SSL协议使用,amqp+nio用于提高系统的延展性和性能。amqp+ssl能够建立安全链接。

amqp配置:

<transportConnector name="amqp" uri="amqp://localhost:5672"/>

amqp+nio配置:

<transportConnector name="amqp+nio" uri="amqp+nio://localhost:5672"/>

amqp+ssl配置:

<transportConnector name="amqp+ssl" uri="amqp+ssl://localhost:5672"/>

MQTT:ActiveMQ 5.8新增长的传输链接。是一个轻量级的消息订阅/发布协议。和AMQP同样,一样支持搭配NIO或SSL使用。

mqtt配置:

<transportConnector name="mqtt" uri="mqtt://localhost:1883"/>

mqtt+nio配置:

<transportConnector name="mqtt+nio" uri="mqtt+nio://localhost:1883"/>

mqtt+ssl配置:

<transportConnector name="mqtt+ssl" uri="mqtt+ssl://localhost:1883"/>

其余:Peer,Multicast,WebSockets。因为使用场景较少,先暂时不介绍了。

相关文章
相关标签/搜索