我已经设置了ActiveMQ多个实例,以便在windows的主从模式下实现故障转移。在设置相同的时候,我只是在bin文件夹下创建了3个实例,而没有改变任何端口,并逐一启动了所有3个实例。第一个实例成为主实例,其余的都处于从模式,直到我停止主实例。
现在我正试图在Linux环境中实现相同的目标。第一个实例成功启动,但当我在不同的窗口启动第二个实例时,它抛出以下错误:
ERROR | Failed to start Apache ActiveMQ ([instance2, ID:132vm6- 57276 -1478597606120-0:1], java.io.IOException: Transport Connector could not be registered in JMX: java.io.IOException: Failed to bind to server socket: tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat. JMX: tcp://0.0.0.0:61616?maxFrameSize=104857600由于:java.net.BindException:地址已在使用)INFO | Apache ActiveMQ 5.14.0 (instance2, ID:132vm6-57227-1478597606120-0:1)正在关闭INFO |连接器开线停止信息|连接器amqp停止INFO |连接器踩踏停止INFO |连接器mqtt已停止INFO |连接器已停止INFO | PListStore:[/opt/apache-activemq-5.14.0/bin/instance2/data/instance2/tmp_storage] stopped .日志含义INFO |停止异步队列任务INFO |停止异步主题任务INFO |停止了KahaDBINFO | Apache ActiveMQ 5.14.0 (instance2, ID:132vm6-57227-1478597606120-0:1) uptime 0.585秒INFO | Apache ActiveMQ 5.14.0 (instance2, ID:132vm6-57227-1478597606120-0:1)正在关闭INFO |关闭org.apache.activemq.xbean。XBeanBrokerFactory$1@4233871a:启动日期[星期二Nov 08 15:03:24 IST 2016];上下文层次的根在上下文关闭时从LifecycleProcessor抛出异常java.lang.IllegalStateException: LifecycleProcessor not initialized -在通过context调用生命周期方法之前调用'refresh'。XBeanBrokerFactory$1@4233871a:启动日期[星期二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):在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等。如果你不打算使用它们,你通常可以注释掉其他的。 - 码头HTTP端口。这是在
jetty.xml
文件中定义的。默认为8161,后面的设置为8162、8163等。 -
JMX端口。这个有点棘手,因为您需要将一段配置粘贴到
activemq.xml
中以显式定义它,如下所示:<managementContext> <managementContext createConnector="true" connectorPort="1099"/> </managementContext>