从java中删除ActiveMQ队列



如何从java程序中删除activemq中的队列?有类似session.deleteQueue()的东西吗?

感谢M.

不使用JMX的简单解决方案,它将连接强制转换为ActiveMQConnection并使用其destroyDestination()方法。使用这种方法的简单实用程序:

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import javax.jms.JMSException;
/**
* simple class to delete a queue form the activeMQ broker
* @author josef.
*/
public class QueueDeleter {
  public static void main(String[] args) {
    if (args.length != 2) {
     System.out.println("please specify broker URL and queue name, nexample:    tcp://localhost:61616 queue1");
     System.exit(2);
    }
    ActiveMQConnection conn = null;
    try {
     conn = (ActiveMQConnection) new    ActiveMQConnectionFactory(args[0]).createConnection();
     conn.destroyDestination(new ActiveMQQueue(args[1]));
    } catch (JMSException e) {
     System.out.println("Error connecting to the browser please check the URL" + e);
    } finally {
     if (conn != null) {
        try {
           conn.close();
        } catch (JMSException e) {
           System.out.println("Error closing connection" + e);
        }
     }
   }
  }
}

Maven 的依赖关系

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-core</artifactId>
        <version>5.7.0</version>
    </dependency>

如果您不介意使用非JMS API调用,那么您可以将Connection对象强制转换为ActiveMQConnection,并调用destroyDestination向其传递要删除的目标实例。如果该目的地上没有活动使用者,它将被删除,否则您将得到一个异常,指示您无法删除具有活动使用者的目的地。

您可以通过"removeQueue"操作对JMX执行此操作。。。

有关程序示例,请参阅本页:

http://www.consulting-notes.com/2010/08/monitoring-and-managing-activemq-with.html

Java本身不支持会话。那么,你到底想做什么呢?是否停止会话访问队列?然后不要访问它并删除(null)对它的引用。

    DefaultHttpClient client = new DefaultHttpClient();
    Config config = Config.getInstance();
    //CONSTRUCT the GET-url to access the queues on the SOI admin site
    HttpGet httpGetQueues = new HttpGet("http://" + config.get(Config.Key.host) + ":" + config.get(Config.Key.port) + "/queue.jsp");  //CHANGE TO VAR THIS IS THE BROKERURL
    String userName = config.get(Config.Key.user);
    String password = config.get(Config.Key.password);
    //add Authentication
    httpGetQueues.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials(userName, password), "UTF-8", false));
    //ACCESS the queues page and SAVE the response  
    HttpResponse httpResponse = client.execute(httpGetQueues);
    HttpEntity entity = httpResponse.getEntity();
    String htmlResponse = EntityUtils.toString(entity);
//System.out.println(htmlResponse);
    //PARSE the response for 'jessioniD'
    String[] parseTemp = htmlResponse.split("css;jsessionid=");
    String temp = parseTemp[1];
    //System.out.println(temp); 
    parseTemp = temp.split("\)");
    String jsessionID = parseTemp[0];
    System.out.println("JsessionID: " + jsessionID);
    //PARSE the response for 'secret'
    parseTemp = htmlResponse.split("secret=");
    temp = parseTemp[1];
    //System.out.println(temp);     
    parseTemp = temp.split(">");
    temp = parseTemp[0].replace(""", "");
    parseTemp = temp.split(" ");
    String secret = parseTemp[0];
    System.out.println("Secret: " + secret);
    String consumerQ = config.get(Config.Key.consumerQueue);
    //CONSTRUCT the GET-url to delete the outound queue on the SOI admin site (use 'secret' parsed from response above)
    HttpGet httpDeleteQueue = new HttpGet("http://usatl-s-ssvm08:8161/deleteDestination.action"
            + "?JMSDestination=" + consumerQ
            + "&JMSDestinationType=queue&secret=" + secret);
    //add Authentication
    httpDeleteQueue.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials(userName, password), "UTF-8", false));
    //add cookie using 'jsessionId' parsed from response above
    httpDeleteQueue.addHeader("Cookie", "JSESSIONID=" + jsessionID);
    //Execute deletion url
    client.execute(httpDeleteQueue);

最新更新