All things are difficult before they are easy. 没有软件的裸机是一具僵尸,没有硬件的软件是一个幽灵。2012,专注于Linux和C语言,关注自动化、性能测试,关注开源社区和开源测试工具、方法,尝试测试团队管理!

ActiveMQ默认会扫描局域网范围内的其他Broker

上一篇 / 下一篇  2010-11-13 19:25:37 / 个人分类:Java

   在帮同学搭建Napoli环境时,需要启动一些消息队列,用到到了ActiveMQ.
Apache ActiveMQ is the most popular and powerful open source messaging and Integration Patterns provider.
http://activemq.apache.org/
   发生一个问题,启动在qa-qd-61-150机器上的ActiveMQ时,提示错误,显示去连接tcp://qa-qd-61-151:616616,由于没有配置这个主机名关于这个主机名"qa-qd-61-151"的路由,所以启动报错,启动不成功。试了一下,在青岛测试机房的172.29.61.*测试机上,运行activeMQ都启动不了,提示相同的错误。
我到处找原因:是否系统里面配置"qa-qd-61-151"的hostname,但是都没有的,hostname都是现实正常,并非是"qa-qd-61-151"。甚至,为了这个,我都把ActiveMQ的源代码下载下来阅读了,可根据日志信息,grep找到是哪个Class抛出的异常。还是没怎么搞懂,为啥会这样。
    后来,只得在本地/etc/hosts文件中配置了到"qa-qd-61-151"的路由,才将qa-qd-61-150这台机上的ActiveMQ启动了;然后,当我试图在qa-qd-61-141上没启动ActiveMQ时,它提示去连接qa-qd-61-150/qa-qd-61-151这两台机的端口了。这时,我忽然想到,它肯定去扫描了局域网,否则它根本不知道局域网内有哪几台机启动着ActiveMQ。
    最后,我终于在apache-activemq-5.2.0/conf/activemq.xml中找到了相应的配置说明,如下:
<networkConnectors>
            <!--by default just auto discover the other brokers-->
            <networkConnector name="default-nc" uri="multicast://default"/>
            <!-- Example of a static configuration:
            <networkConnector name="host1 and host2" uri="static://(tcp://host1:61616,tcp://host2:61616)"/>
            -->
        </networkConnectors>
    所以,它默认会根据61616端口去扫描广播地址范围内的其他broker,找到了就试图连接上去(我看了下广播地为:172.29.61.255);而且获取到的其他broker都是hostname,如果没有到其他broker主机名的路由,就会报错。我们只需要将上面的这一段全部注释即可,用"<!--   -->"来注释,注意这个注释里面不能再包含"--"否则XML解析时会报错。
    哎,找了半天原因,最后还是在它本身的配置中找到了,找问题时,还是得把自身配置研究清楚啊。

TAG: ActiveMQ 消息队列

 

评分:0

我来说两句

smile665

smile665

Stay hungry, stay foolish. 得意之时谨记,一半命运还掌握在上帝手里;失意之时须知,一半命运还掌握在自己手里。

日历

« 2024-04-20  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 955164
  • 日志数: 220
  • 建立时间: 2008-11-06
  • 更新时间: 2012-10-06

RSS订阅

Open Toolbar