如何在activemq 5.8.0中删除空队列(即没有队列名称)?
当我使用活动5.8.0控制台中的删除按钮删除空队列时,我遇到了空队列的问题,然后抛出一些错误,如下所示 .
即错误!处理此请求时发生异常,请检查日志以获取更多信息!你想下一步该做什么?
我们最近遇到了这个问题,我在上面记录了这张票:https://issues.apache.org/jira/browse/AMQ-5211
我们正在使用mkahadb(配置为每个目标使用一个单独的目录)并且能够简单地删除相应的目录(/ data // kaha / queue#3a#2f#2f)并重新启动AMQ ...
否则,尝试JMX或者你需要消灭整个消息存储库并重新开始,如Tim建议的那样......
这里是我写回来处理类似问题的一些代码 . 它使用JMX连接并删除任何从未使用过的空队列 .
import javax.management.JMX; import javax.management.MBeanServerConnection; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; import org.apache.activemq.broker.jmx.BrokerViewMBean; import org.apache.activemq.broker.jmx.QueueViewMBean; public class CleanQueues { public static void main(String[] args) throws Exception { if (args.length != 1 && args.length != 2) { System.out.println("Usage: CleanQueues host [port]"); System.exit(1); } String host = args[0]; String port = "1099"; if (args.length == 2) { port = args[2]; } JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://"+host+":"+port+"/jmxrmi"); JMXConnector jmxc = JMXConnectorFactory.connect(url, null); MBeanServerConnection connection = jmxc.getMBeanServerConnection(); ObjectName broker = null; for (ObjectName objectName : connection.queryNames(new ObjectName("org.apache.activemq:BrokerName=*,Type=Broker"),null)) { broker = objectName; } if (broker == null) { System.out.println("Could not find broker name."); System.exit(2); } BrokerViewMBean proxy = JMX.newMBeanProxy(connection, broker, BrokerViewMBean.class); for (ObjectName n : proxy.getQueues()) { QueueViewMBean q = JMX.newMBeanProxy(connection, n, QueueViewMBean.class); if (q.getDispatchCount() == 0 && q.getConsumerCount() == 0) { System.out.println("Removing queue: "+q.getName()); proxy.removeQueue(q.getName()); } } } }
在早期版本中,在创建具有空白名称的队列时存在一些问题 . 我不确定你是否会成功删除队列,而不是简单地删除所有KahaDB文件并重新开始 .
要尝试的一件事是使用JConsole连接到代理并在Queue MBean上调用remove操作 .
3 回答
我们最近遇到了这个问题,我在上面记录了这张票:https://issues.apache.org/jira/browse/AMQ-5211
我们正在使用mkahadb(配置为每个目标使用一个单独的目录)并且能够简单地删除相应的目录(/ data // kaha / queue#3a#2f#2f)并重新启动AMQ ...
否则,尝试JMX或者你需要消灭整个消息存储库并重新开始,如Tim建议的那样......
这里是我写回来处理类似问题的一些代码 . 它使用JMX连接并删除任何从未使用过的空队列 .
在早期版本中,在创建具有空白名称的队列时存在一些问题 . 我不确定你是否会成功删除队列,而不是简单地删除所有KahaDB文件并重新开始 .
要尝试的一件事是使用JConsole连接到代理并在Queue MBean上调用remove操作 .