2015-04-23 46 views
0

我們使用數千個隊列來傳遞系統內的數據。出現的問題是,它總是需要很多時間來銷燬它,而且我們必須等到隊列不再被使用。如何在短時間內按需破壞千位ActiveMQ隊列?

要做到這一點,我們curently使用下面的方法

try { 
    _consumer.getEndpoint().stop(); 
    _consumer.stop(); 
} 
catch (Exception ex) { 
    System.out.println("Error: " + ex.getMessage()); 
} 

// Wait a little, so that ActiveMQ has time to realize that the endpoint is destroyed, 
// which is necessary to be done before the queue is destroyed, 
// otherwise we get an "Error: Destination still has an active subscription: queue://receive:XXX": 

try { 
    Thread.sleep(1); 
} 
catch (InterruptedException ex) { 
    System.out.println("Error: " + ex.getMessage()); 
} 

// Destroy queue: 
String shortRxQueueName = _rxQueueName.replace("activemq:queue:", ""); 
try { 
    activeMQConnection.destroyDestination(new ActiveMQQueue(shortRxQueueName)); 
} 
catch (JMSException ex) { 
    System.out.println("Error: " + ex.getMessage()); 
} 

即使當我們試圖忽略連接到代理和只使用curently可activeMQConnection回採300個隊列大約需要50秒。

3402: Stopping clients... 
53500: Stopping camel context... 

因此,對於每個單個銷燬隊列,我們​​消耗0.16s。

如何讓它更快?駱駝是否包含類似池或緩存隊列的內容來執行這些操作?

+0

你有權啓動/停止服務器嗎? – Vihar

+0

是的。但在目標系統中,服務器應該連續工作。 W想要限制爲新連接準備好的隊列數並釋放資源。 –

回答