论坛首页 Java企业应用论坛

activeMQ指南针_“神奇”的自动发现功能

浏览 3415 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-15  

                                          


 

                                                                                                         图一
      自动这个功能一直给人一种有点“神奇”的感觉,尤其是真正好用的自动功能。我们在activeMQ中就出现了自动发现功能,下面我们具体分析一下该功能的实现原理。 
      为了便于说明,我们用图一所示的消息传输拓扑图来进行分析。图中有两个activeMQ、一个客户端(消息发送者/消费者)。我们使用activeMQ的自动发现功能让它们来发现彼此的存在。自动发现功能的好处在activeMQ里面,我想主要能使用在当目前的activeMQ集群处理能力不行的时候,可以动态加入新的activeMQ来分担负载,这就可以很好的水平扩展。
     首先,我们对图一中的带颜色部分做一个说明,带颜色的小矩形都代表着能发送和接收广播数据包的通讯端口,有‘S’标志的表示该端口主要向外发送广播数据包,有‘R’表示该端口只接收广播数据包。具体自动发现过程描述如下:activeMQ通过端口向外广播它们自己,当某activeMQ收到一个广播包后,解析该广播包,并从中建立activeMQ之间的通讯桥梁。而当某客户端收到包含activeMQ的基本信息的广播包后,它也会把这个信息保存住,在需要进行重连接的时候进行重连接。
   讲到activeMQ的自动发现功能,我们就不得不说到它的配置文件,具体内容如下:
1.如果想拥有向外发送广播信息的话,也就是图中带‘S’的端口,修改配置文件中的< transportConnector  …/>,这个地方得加一个参数discoveryUri="multicast://default"。
2.如果某activeMQ想能自动发现其他activeMQ,也就是图中带‘R’的端口,修改配置文件中的<networkConnector  …/>,这个地方uri要类似这样设置uri="multicast://default"。
     activeMQ在实现的时候也有点意思,我们所说的带‘S’或带‘R’的端口,它们的功能都在同一个类中实现:MulticastDiscoveryAgent。而客户端的相关实现,则在FailoverTransport类中完成主要功能。

 

  • 大小: 34.3 KB
   发表时间:2009-10-24  
受教了,我在内网测试的时候有数据丢失,不知道是不是被别的AMQ抢了
0 请登录后投票
   发表时间:2009-11-07  
multicast是基于UDP协议实现的,所以会出现丢失消息的情况。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics