首页 > 解决方案 > 有没有办法在不重新启动代理的情况下添加和运行集群配置?

问题描述

或者只有一种方法 - 将配置添加到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)

标签: activemq-artemis

解决方案


这在理论上是可能的。代理启动后,您需要停止ClusterManager使用该stop()方法。然后你可以更新经纪人的,Configuration然后在.deploy()start()ClusterManager

我以前没有这样做过,所以你可能会遇到问题。事实上,停止和启动代理本身可能更简单、更安全。


推荐阅读