如何使用Apache.NMS API以编程方式清除ActiveMQ队列?

如何使用Apache.NMS API以编程方式清除ActiveMQ队列?,activemq,nms,apache-nms,Activemq,Nms,Apache Nms,我需要能够使用Apache.NMS(C#)以编程方式清除队列。我一直在浏览NMS API,但没有看到这样的功能。它存在吗?没有直接的方法从NMS API刷新队列,这更像是一种管理功能。您可以将IConnection实例强制转换为Apahce.NMS.ActiveMQ.Connection,然后调用DeleteDestination。如果队列上没有使用者,这将起作用,但如果有使用者,则会引发异常。不完全确定“刷新”队列是什么意思(删除所有消息?),但您可以通过设置事务会话来管理消息: ISessi

我需要能够使用Apache.NMS(C#)以编程方式清除队列。我一直在浏览NMS API,但没有看到这样的功能。它存在吗?

没有直接的方法从NMS API刷新队列,这更像是一种管理功能。您可以将IConnection实例强制转换为Apahce.NMS.ActiveMQ.Connection,然后调用DeleteDestination。如果队列上没有使用者,这将起作用,但如果有使用者,则会引发异常。

不完全确定“刷新”队列是什么意思(删除所有消息?),但您可以通过设置事务会话来管理消息:

ISession consumerSession = = connection.CreateSession(AcknowledgementMode.Transactional);
然后,您可以使用:

//will remove message from queue on success
consumerSession.Commit();
或:


我希望NMS包含一个管理API,但现在这就满足了我的需要。谢谢你的提示,蒂姆!NMS不可能包含管理API,因为代理基于java并通过JMX进行管理。如果您想创建一个开放源代码库来通过.NET与JMX通信,那么我们可以,但在此之前,在基于NMS的客户端中可以做的事情是有限的。我想,你可以编写一些基于java的库来执行你需要的管理任务,并通过你的.NET应用程序中的IKVM运行它们。交易有不同的目的。蒂姆·比什已经回答了我的问题。
//on failure, back on queue
consumerSession.Rollback();