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。
如何讓它更快?駱駝是否包含類似池或緩存隊列的內容來執行這些操作?
你有權啓動/停止服務器嗎? – Vihar
是的。但在目標系統中,服務器應該連續工作。 W想要限制爲新連接準備好的隊列數並釋放資源。 –