在同一台Linux机器上使用主从模式下的多个实例进行activemq故障转移

时间:2016-11-08 10:18:15

标签: activemq multiple-instances failover

我已经设置了ActiveMQ多个实例来实现Windows中主从模式的故障转移。 在设置相同的时候我只是在bin文件夹下创建了3个实例而没有更改任何端口并逐个启动所有3个实例。第一个实例成为主,其余的都处于从属模式,直到我停止了主实例。

现在我试图在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:地址已在使用中)  信息| Apache ActiveMQ 5.14.0(instance2,ID:132vm6-57227-1478597606120-0:1)正在关闭  信息|连接器openwire停止了  信息|连接器amqp停止了  信息|连接器stomp停止了  信息|连接器mqtt停止了  信息|连接器已停止  信息| PListStore:[/ opt / apache-activemq-5.14.0 / bin / instance2 / data / instance2 / tmp_storage]已停止  信息|停止异步队列任务  信息|停止异步主题任务  信息|停止了KahaDB  信息| Apache ActiveMQ 5.14.0(instance2,ID:132vm6-57227-1478597606120-0:1)正常运行时间0.585秒  信息| Apache ActiveMQ 5.14.0(instance2,ID:132vm6-57227-1478597606120-0:1)关闭  信息|关闭org.apache.activemq.xbean.XBeanBrokerFactory$1@4233871a:启动日期[Tue Nov 08 15:03:24 IST 2016];上下文层次结构的根  警告| LifecycleProcessor在上下文关闭时抛出异常 java.lang.IllegalStateException:LifecycleProcessor未初始化 - 调用'刷新'在通过上下文调用生命周期方法之前:org.apache.activemq.xbean.XBeanBrokerFactory$1@4233871a:启动日期[Tue Nov 08 15:03:24 IST 2016];上下文层次结构的根         在org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:357)[spring-context-4.1.9.RELEASE.jar:4.1.9.RELEASE]         在org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:884)[spring-context-4.1.9.RELEASE.jar:4.1.9.RELEASE]         在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]         在org.apache.activemq.broker.BrokerService.stop(BrokerService.java:875)[activemq-broker-5.14.0.jar:5.14.0]         在org.apache.activemq.xbean.XBeanBrokerService.stop(XBeanBrokerService.java:122)[activemq-spring-5.14.0.jar:5.14.0]         在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]         在java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_65]

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

1 个答案:

答案 0 :(得分:2)

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

  • 接受消息传递流量的transportConnector端口。这些是在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。希望这会有所帮助。