activemq-artemis - 有没有办法在不重新启动代理的情况下添加和运行集群配置?
问题描述
或者只有一种方法 - 将配置添加到broker.xml
代理并重新启动代理,只有这样集群才能工作。我在方法中找到embeddedActiveMQ.getActiveMQServer()
了.getClusterManager()
,我可以用它以某种方式做到这一点ClusterManager
吗?
更新
这种方式(clusterManager - stop - deploy - start)有效,但有时会出现以下异常
java.lang.IllegalStateException: Server locator is closed (maybe it was garbage collected)
at org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.assertOpen(ServerLocatorImpl.java:1848)
at org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:648)
at org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.connect(ServerLocatorImpl.java:549)
at org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.connect(ServerLocatorImpl.java:528)
at org.apache.activemq.artemis.core.server.cluster.ClusterController$ConnectRunnable.run(ClusterController.java:433)
at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42)
at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31)
at org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:65)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118)
解决方案
这在理论上是可能的。代理启动后,您需要停止ClusterManager
使用该stop()
方法。然后你可以更新经纪人的,Configuration
然后在.deploy()
start()
ClusterManager
我以前没有这样做过,所以你可能会遇到问题。事实上,停止和启动代理本身可能更简单、更安全。