2016-09-27 61 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