如何从java程序中删除activemq中的队列?有没有像session.delelteQueue()?
谢谢你。
答案 0 :(得分:6)
简单的解决方案,它不使用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>
答案 1 :(得分:5)
如果您不介意使用非JMS API调用,则可以将Connection对象强制转换为ActiveMQConnection并调用destroyDestination,并将其传递给您要删除的目标实例。如果该目的地上没有活跃的消费者,则会将其删除,否则您将收到一个异常,表明您无法删除具有活跃消费者的目的地。
答案 2 :(得分:1)
您可以通过'removeQueue'操作使用JMX执行此操作...
请参阅此页面以获取编程示例:
http://www.consulting-notes.com/2010/08/monitoring-and-managing-activemq-with.html
答案 3 :(得分:0)
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);
答案 4 :(得分:-1)
Java本身不支持会话。那么,你究竟想做什么?停止访问队列的会话?然后不要访问它并删除(null)对它的引用。