我们使用数千个队列在系统内传递数据。出现的问题是,销毁它总是需要很多时间,而且我们必须等到队列不再被使用。
为此,我们目前使用以下方法
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());
}
即使我们尝试忽略与代理的连接并仅使用当前可用的 activeMQConnection
,停止 300 个队列也需要大约 50 秒。
3402: Stopping clients...
53500: Stopping camel context...
因此,对于每个销毁队列,我们消耗 0.16 秒。
如何让它更快? Camel 是否包含池或缓存队列之类的东西来执行操作?
我是一名优秀的程序员,十分优秀!