ActiveMQ协议配置以及网络链接

事业无穷年。 —— 韩愈

1. TransportConnector支持的协议

ActiveMQ通过网络连接器这种连接机制来实现客户端与服务端之间的通信。
  ActiveMQ支持的client-broker通讯协议有:TCP、NIO、UDP、SSL、Http(s)、VM。 其中配置Transport Connector的文件在activeMQ安装目录的conf/activemq.xml中的标签之内。

1.1 TCP协议

该协议是ActiveMQ默认的Broker配置,TCP的Client监听端口61616。连接的URI格式为tcp://hostname:portkey=value&key=value(参数可选)。
  使用该协议,在网络传输数据前,必须要实现序列化,消息是通过一个叫wire protocol的来序列化成字节流。默认情况下,ActiveMQ把wire protocol叫做OpenWire。
  在activemq.xml中的配置示例如下:


     
 

在客户端的代码示例如下:

connectionFactory =newActiveMQConnectionFactory("admin","admin","tcp://127.0.0.1:61616");

1.2 NIO协议

NIO协议和TCP协议类似,但NIO的性能比TCP更好,因此建议使用NIO协议。
  NIO连接的URI格式为nio://hostname:portkey=value&key=value(参数可选)。
  在activemq.xml中的配置示例如下:


     

在客户端的代码示例如下:

connectionFactory =newActiveMQConnectionFactory("admin","admin","nio://127.0.0.1:61616");

1.3 UDP协议

UDP协议是不保证数据的可靠性的,因此UDP通常用在快速数据传递和不怕数据丢失的场景中。
  UDP连接的URI格式为udp://hostname:portkey=value&key=value(参数可选)。
  在activemq.xml中的配置示例如下:


     

在客户端的代码示例如下:

connectionFactory =newActiveMQConnectionFactory("admin","admin","udp://127.0.0.1:61616");

1.4 SSL协议

连接的URL形式: ssl://hostname:port?key=value。
  在activemq.xml中的配置示例如下:


     

在客户端的代码示例如下:

connectionFactory =newActiveMQConnectionFactory("admin","admin","ssl://127.0.0.1:61616");

1.5 HTTP协议

连接的URL形式: http://hostname:port?key=value。
  在activemq.xml中的配置示例如下:


     

在客户端的代码示例如下:

connectionFactory =newActiveMQConnectionFactory("admin","admin","http://127.0.0.1:61616");

1.5 VM协议

如果客户端和broker在一个虚拟机内的话,通过VM协议通讯在VM内通讯,从而减少网络传输的开销。
  VM协议的连接的URI形式: vm//brokerName?key=value。

ActiveMQ支持的协议参考文档

2. 容错的链接

上面的例子都是配置连接到指定的Broker上,若Broker挂掉,客户端就无法正常链接到Broker上了。Failover协议实现了自动重新链接的逻辑,当一个Broker链接失败时,那么会链接到其他的Broker上。有两种方式提供了稳定的Brokers列表供Client链接。
  (1) 提供一个static的可用的Brokers列表。
  (2) 提供一个dynamic 发现的可用Brokers。

2.1 客户端配置 - Failover Protocol的配置方式

Failover Protocol的配置格式如下:

failover:(uri1,...,uriN)?key=value 或者 failover:uri1,...,uriN

在客户端的代码示例如下:

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("admin","admin","failover:(tcp://192.168.91.8:61616,tcp://192.168.91.8:61676)?randomize=false");

2.2 服务端配置 - 静态网络链接

  网络链接(networkConnector)指的是Broker到Broker的通信。ActiveMQ的networkConnector默认是单向的,一个Broker在一端发送消息,另一Broker在另一端接收消息。当然也支持双向,这样对于两个Broker,不仅发送消息而且也能从相同的通道来接收消息。
  静态网络链接用于创建一个静态的配置对于网络中的多个Broker。一个复合url包括多个url地址,格式如:static:(uri1,uri2,uri3,...)?key=value。
  在activemq.xml中的配置示例如下:



    

静态网络链接基本原理:

ActiveMQ协议配置以及网络链接_第1张图片
静态网络链接基本原理图

  上图中,两个Brokers是通过一个static的协议来网络链接的。一个Consumer链接到brokerB的一个地址上 ,当Producer在brokerA上以相同的地址发送消息时,此时它将被转移到brokerB上。也就是,BrokerA会转发消息到BrokerB上。

2.3 服务端配置 - 动态网络链接

  动态网络链接指的是能动态的发现在网络上可用的Broker。

2.3.1 multicast协议

  ActiveMQ使用Multicast协议将一个Broker和其他的Broker连接起来。
  multicast的基本的格式配置如下:

multicast://ipadaddress:port?transportOptions

  配置示例如下:
  (1) 默认配置:

multicast://default

请注意,默认情况下是不可靠的多播,数据包可能会丢失

  (2) 特定的ip和端口

multicast://224.1.2.3:6255

  (3)特定的ip和端口以及组名

multicast://224.1.2.3:6255?group=mygroupname

  在ActiveMQ.xml中的完整配置示例:


    
        
    
    
        
    

  上面的示例中:
  1:uri=“multicast://default”中的default是activemq默认的ip,默认动态的寻找地址。
  2:“discoveryUri”是指在transport中用multicast的default的地址传递。
  3:“uri”指动态寻找可利用的地址。
  4:如何防止自动的寻找地址?
    4.1:名称为openwire的transport,移除discoveryUri=”multicast://default”即可。
    4.2:名称为“default-nc”的networkConnector,注释掉或者删除即可。ActiveMQ默认的networkConnector基于multicast协议的链接的默认名称是default-nc,而且自动的去发现其他broker。
    4.3:设置brokerName的名字唯一,可以唯一识别Broker的实例,默认是localhost。

2.3.2 discovery协议

  discovery是在multicast协议的功能上定义的。功能类似与failover功能。它将动态的发现multicast协议的broker的链接并且随机的链接其中一个broker。
  discovery基本配置格式如下:

discovery:(discoveryAgentURI)?transportOptions

  在ActiveMQ.xml中的完整配置示例如下:


    
        
    

2.3.3 peer(对等)协议

  ActiveMQ提供了VM协议的transportConnector,用于在应用程序中嵌入ActiveMQ代理;同时ActiveMQ还提供了Peer协议,以支持在应用程序中嵌入ActiveMQ集群,嵌入的ActiveMQ集群中所有的代理均在本地。
  Peer协议的URI语法如下:peer://peergroup/brokerName?key=value。
  当应用程序中以这个方式启动一个ActiveMQ时,会在应用程序中嵌入一个ActiveMQ代理,同时这个代理会被配置与本地其他程序中具有相同peergroup名称的代理建立连接,从而组成一个嵌入的ActiveMQ本地集群。

2.3.4 fanout协议

  fanout协议用于让客户端同时连接至多个ActiveMQ代理,它既可以使用静态机制,也可以使用动态机制。它的URI语法如下:
  fanout:(fanoutURI)?key=value
  例如,fanout:(static:(tcp://host1:61616,tcp://host2:61616,tcp://host3:61616))会让客户端同时连接至host1,host2,host3这个三个服务器上的ActiveMQ代理;而fanout:(multicast://default)会让客户端连接至所有能够发现的ActiveMQ代理。

参考资料
ActiveMQ集群简介
peer protocol
discovery protocol
fanout protocol

你可能感兴趣的:(ActiveMQ协议配置以及网络链接)