2016-09-27 31 views
0

我想知道如何在我的应用程序处于受控维护模式时方便地暂停所有使用者/消息收听者。该应用程序使用ActiveMQ 5.13.3客户端库。ActiveMQ:使用连接池时暂停/恢复使用者

前一段时间我已经从单一的ActiveMQConnectionFactory切换到PooledConnectionFactory。它被设置像这样:

ActiveMQConnectionFactory amcf = new ActiveMQConnectionFactory(config.getMessageBrokerUrl()); 
amcf.setTrustedPackages(Arrays.asList(new String[] { 
    "some.package.or.other", 
    "java.lang", 
    "java.util" 
})); 

connectionFactory = new PooledConnectionFactory(amcf); 
connectionFactory.setCreateConnectionOnStartup(true); 

消费者和生产者“创造”(=取)从连接池的连接,并“关闭”它当他们完成,将其返回到池中。显然在MessageListeners的情况下,它在启动时获得一次,并在应用程序关闭时返回。

ActiveMQConnection.stop()说的是暂时停止连接传入的消息。完美的我想要的,只有游泳池显然包含许多连接,而不仅仅是一个。

如何暂停全部 ActiveMQ连接池的连接?

回答

0

我想你不得不采用其他方式暂停使用池连接池的消息传递。例如,在使用弹簧DMLC时可以看到这个问题(可能不适用于您):Start and Stop JMS Listener using Spring

您也可以从代理端暂停该队列。在队列的JMX MBean上有一个暂停/恢复操作。见附件截图。

它不回答有关暂停客户端的问题,但可以解决您的问题。

pause queue jmx operation in jconsole

+0

谢谢。暂停队列对我来说不是解决方案,其他客户端仍然应该通过它。用例是受控关闭群集中的单个节点。我会研究停止messageListeners而不是连接。 – Hank