2016-11-08 20 views
1

我已经设置了ActiveMQ多个实例,以实现Windows主从模式下的故障转移。 虽然设置相同,我只是在bin文件夹下创建3个实例,无需更改任何端口,并逐一启动所有3个实例。一次成为主人,剩下的人在奴隶模式下,直到我停止主人实例。在同一台Linux机器上使用主从模式下的多个实例进行activemq故障转移

现在我正试图在Linux环境中实现相同的功能。第一个实例成功启动,但当我在另一个窗口中启动第二个实例时,它会抛出错误:

错误|无法启动Apache ActiveMQ([instance2,ID:132vm6-57227-1478597606120-0:1]),java.io.IOException:传输连接器无法在JMX中注册:java.io.IOException:无法绑定到服务器套接字: tcp://0.0.0.0:61616?maximumConnections = 1000 & wireFormat.maxFrameSize = 104857600由于:java.net.BindException:地址已被使用) INFO | Apache ActiveMQ 5.14.0(instance2,ID:132vm6-57227-1478597606120-0:1)正在关闭 INFO |连接器openwire停止 INFO |连接器amqp已停止 INFO |连接器跺脚停止 INFO |连接器mqtt已停止 INFO |连接器ws停止 INFO | PListStore:[/ opt/apache-activemq-5.14.0/bin/instance2/data/instance2/tmp_storage]已停止 INFO |停止异步队列任务 INFO |停止异步主题任务 INFO |停止KahaDB 信息| Apache ActiveMQ 5.14.0(instance2,ID:132vm6-57227-1478597606120-0:1)正常运行时间0.585秒 INFO | Apache ActiveMQ 5.14.0(instance2,ID:132vm6-57227-1478597606120-0:1)is shutdown INFO |关闭[email protected]:启动日期[Tue Nov 08 15:03:24 IST 2016];上下文层次结构的根 WARN |在上下文关闭时从LifecycleProcessor抛出的异常 java.lang.IllegalStateException:未初始化LifecycleProcessor - 在通过上下文调用生命周期方法之前调用'refresh':[email protected]:startup date [Tue Nov 08 15 :2016年03月24日IST];上下文层次结构的根目录 at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:357)[spring-context-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.springframework.context .support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:884)[spring-context-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java: 843)[spring-context-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.apache.activemq.hooks.SpringContextHook.run(SpringContextHook.java:30)[activemq-spring-5.14.0。 jar:5.14.0] at org.apache.activemq.broker.BrokerService.stop(BrokerService.java:875)[activemq-broker-5.14.0.jar:5.14.0] at org.apache.activemq.xbean .XBeanBrokerService.stop(XBeanBr okerService.java:122)[activemq-spring-5.14.0.jar:5.14.0] at org.apache.activemq.broker.BrokerService.start(BrokerService.java:629)[activemq-broker-5.14.0。 jar:5.14.0] at org.apache.activemq.xbean.XBeanBrokerService.afterPropertiesSet(XBeanBrokerService.java:73)[activemq-spring-5.14.0.jar:5.14.0] at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)[:1.7.0_65] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[:1.7.0_65] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[: 1.7.0_65] at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_65]

我正在使用ActiveMQ 5.14版本。 如果有人遇到类似问题,请提供您的意见。

回答

2

要在同一台机器上运行多个ActiveMQ实例,您需要更改它们尝试打开的端口。有(至少)3个端口需要更改:

  • 该端口接受消息通信。这些在activemq.xml文件中定义。通常,您只需要openwire一个 - 默认情况下这是61616;我通常在其他ActiveMQ实例中将其更改为61626,61636等。如果您不打算使用它们,通常可以将其他人注释掉。
  • Jetty HTTP端口。这在jetty.xml文件中定义。默认值为8161,将下一个设置为8162,8163等。
  • JMX端口。这一个是有点棘手,因为你需要一块配置的粘成activemq.xml如下明确定义它:

    <managementContext> 
        <managementContext createConnector="true" connectorPort="1099"/> 
    </managementContext> 
    

可以那么这在其他情况下,更改为1199,1299。希望这可以帮助。

+0

嗨@Jakub ..感谢您的输入,我已经测试过您提及的设置以及它对我的工作。但是,当我尝试在不更改端口的情况下运行多个实例时,它在Linux中引发错误,但通过命令行在Windows中正常工作。想知道如果这可以在Windows中工作,那么为什么不在Linux? – JavaSeeker

+0

有可能您的数据目录指向每个Linux代理安装中的不同位置。因此,他们都试图同时出现(即没有主从)。在Windows上,听起来好像你设置正确。经纪人只有认为自己处于“主”模式时才会开放其端口。 –

+0

@Jakub,你可以发布样本activemq。 xml的故障转移? –

相关问题