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

在同一台linux机器上使用主从模式下的多个实例进行activemq故障切换,activemq,multiple-instances,failover,Activemq,Multiple Instances,Failover,我在windows中设置了ActiveMQ多实例,以在主从模式下实现故障切换。 在设置相同的端口时,我只在bin文件夹下创建了3个实例,没有更改任何端口,并逐个启动了所有3个实例。第一个实例成为主实例,其余实例处于从属模式,直到我停止主实例 现在我正试图在Linux环境中实现同样的功能。第一个实例成功启动,但当我在另一个窗口中启动第二个实例时,它会抛出以下错误: 错误|无法启动Apache ActiveMQ([instance2,ID:132vm6-57227-1478597606120-0:1

我在windows中设置了ActiveMQ多实例,以在主从模式下实现故障切换。 在设置相同的端口时,我只在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(实例2,ID:132vm6-57227-1478597606120-0:1)正在关闭 信息|连接器开路已停止 信息|连接器amqp已停止 信息|连接器踩踏停止 信息|连接器mqtt已停止 信息|连接器ws已停止 信息| PListStore:[/opt/apache-activemq-5.14.0/bin/instance2/data/instance2/tmp_存储]已停止 信息|停止异步队列任务 信息|停止异步主题任务 信息|已停止 信息| Apache ActiveMQ 5.14.0(实例2,ID:132vm6-57227-1478597606120-0:1)正常运行时间0.585秒 信息| Apache ActiveMQ 5.14.0(实例2,ID:132vm6-57227-1478597606120-0:1)已关闭 信息|关闭org.apache.activemq.xbean.XBeanBrokerFactory$1@4233871a:启动日期【2016年11月8日星期二15:03:24 IST】;上下文层次结构的根 警告|上下文关闭时从LifecycleProcessor引发异常 java.lang.IllegalStateException:LifecycleProcessor未初始化-在通过以下上下文调用生命周期方法之前调用“刷新”:org.apache.activemq.xbean.XBeanBrokerFactory$1@4233871a:启动日期【2016年11月8日星期二15:03:24 IST】;上下文层次结构的根 位于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] 在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] 在org.apache.activemq.xbean.XBeanBrokerService.afterPropertiesSet(XBeanBrokerService.java:73)[activemq-spring-5.14.0.jar:5.14.0] 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)[:1.7.0_65] 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[:1.7.0_65] 在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版本。
如果有人遇到类似问题,请提供您的输入。

要在同一台计算机上运行多个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>
    
    
    

然后,您可以在其他实例中将其更改为11991299。希望这有帮助。

Hi@Jakub。。谢谢你的投入,我已经测试了你提到的设置,它也为我工作。但当我尝试在不更改端口的情况下运行多个实例时,它在Linux中会抛出错误,但在Windows中通过命令行可以正常工作。想知道这是否可以在windows中工作,那么为什么不能在Linux中工作呢?很可能您的数据目录指向每个Linux broker安装中的不同位置。因此,它们都试图同时出现(即没有主从)。在Windows上,听起来好像您设置正确。代理只有在认为自己处于“主”模式时才会打开其端口。@Jakub,请发布示例activemq。用于故障转移的xml?只需将ACTIVEMQ_数据环境变量设置为某个完整目录,它就会被启动脚本拾取。e、 g.
c:\activemq\shareddata