【问题标题】:ActiveMQ - Removing queues programmaticallyActiveMQ - 以编程方式删除队列
【发布时间】:2011-03-03 11:46:01
【问题描述】:

Fellow StackOverflowers,有没有办法让我以编程方式删除 ActiveMQ 中的队列或主题?我正在使用 ActiveMQ 的标准持久性,并且我的应用程序要求在启动时动态重新创建所有新队列(除非队列中存储了消息,在这种情况下,队列应该保持存在)。

我还通过会话以编程方式创建所有队列。是否有与该程序等效的程序,仅用于删除队列?查询和迭代现有队列也很有用,但我还没有找到方法。

【问题讨论】:

  • 您是在运行 ActiveMQ 嵌入式还是独立的?

标签: persistence queue activemq


【解决方案1】:

虽然没有很多具体的例子,但这里有一些关于它的文档: http://activemq.apache.org/how-do-i-purge-a-queue.html

【讨论】:

  • 谢谢,不,我稍后会看看 BrokerViewMBean 接口,看看我能用它做什么。我会告诉你它是否有效。
【解决方案2】:

要以编程方式从 ActiveMQ 中删除目标,您需要使用代理 MBean (org.apache.activemq:BrokerName=localhost,Type=Broker) 上的 removeTopic 和 removeQueue 方法通过 JMX 执行此操作。我已经发布了一些示例代码来演示这一点,包括在 Gist 上使用 removeTopic 方法:

http://gist.github.com/439668

希望对您有所帮助。

布鲁斯

【讨论】:

    【解决方案3】:

    您也可以Delete Destinations 在一段时间内处于非活动状态。自 Active MQ 5.4 起可用

    或者,如果您正在运行 ActiveMQ 嵌入式,您可以使用 API 删除目标:Region.removeDestination

    【讨论】:

      【解决方案4】:

      如果你使用spring JmsTemplate,你可以这样:

      Connection cn = getJmsTemplate().getConnectionFactory().createConnection();
      ActiveMQDestination destination = ActiveMQDestination.createDestination(queueName, ActiveMQDestination.QUEUE_TYPE);             
      
      if(cn instanceof PooledConnection){
          ((PooledConnection)cn).getConnection().destroyDestination(destination );
      }
      

      【讨论】:

        猜你喜欢
        • 2011-06-27
        • 2021-03-08
        • 1970-01-01
        • 2020-04-23
        • 2012-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多