有没有办法在不重启代理的情况下添加和 运行 集群配置?
Is there a way to add and run a cluster configuration without rebooting the broker?
或者只有一种方法 - 将配置添加到 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.run(ActiveMQThreadFactory.java:118)
理论上是可以的。代理启动后,您需要使用 stop()
方法停止 ClusterManager
。然后您可以更新代理的 Configuration
,然后在 ClusterManager
.
上调用 deploy()
和 start()
我以前没有这样做过,所以您可能会遇到问题。事实上,停止和启动代理本身可能更简单、更安全。
或者只有一种方法 - 将配置添加到 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.run(ActiveMQThreadFactory.java:118)
理论上是可以的。代理启动后,您需要使用 stop()
方法停止 ClusterManager
。然后您可以更新代理的 Configuration
,然后在 ClusterManager
.
deploy()
和 start()
我以前没有这样做过,所以您可能会遇到问题。事实上,停止和启动代理本身可能更简单、更安全。