【问题标题】:how to delete a null queue(i.e without queue name ) in activemq 5.8.0?如何在 activemq 5.8.0 中删除空队列(即没有队列名称)?
【发布时间】:2014-06-26 03:52:46
【问题描述】:

如何在 activemq 5.8.0 中删除空队列(即没有队列名称)?

当我在活动 5.8.0 控制台中使用删除按钮删除空队列时,我遇到了空队列问题,然后抛出一些错误,如下所示。

即错误!

处理此请求时发生异常,请检查日志 更多信息!

接下来你想做什么?

【问题讨论】:

    标签: activemq


    【解决方案1】:

    在早期版本中创建具有空白名称的队列存在一些问题。我不确定您是否会成功删除队列,而无需简单地删除所有 KahaDB 文件并重新开始。

    要尝试的一件事是使用 JConsole 连接到代理并在队列 MBean 上调用删除操作。

    【讨论】:

    • 使用 JConsole 对我来说效果很好,只需使用空值字段调用 removeQueue。
    【解决方案2】:

    我们最近遇到了这个问题,我在上面记录了这张票:https://issues.apache.org/jira/browse/AMQ-5211

    我们正在使用 mkahadb(配置为每个目标使用单独的目录),并且能够简单地删除相应的目录 (/data//kaha/queue#3a#2f#2f) 并重新启动 AMQ...

    否则,请尝试 JMX,否则您将需要清除整个消息存储并按照 Tim 的建议重新开始...

    【讨论】:

      【解决方案3】:

      这是我不久前为处理类似问题而编写的一些代码。它使用 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());
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-03-08
        • 1970-01-01
        • 2012-08-17
        • 2013-11-22
        • 2014-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-09
        相关资源
        最近更新 更多