【问题标题】:How can I programatically purge an ActiveMQ queue using the Apache.NMS API?如何使用 Apache.NMS API 以编程方式清除 ActiveMQ 队列?
【发布时间】:2011-06-27 20:33:14
【问题描述】:

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

【问题讨论】:

    标签: activemq nms apache-nms


    【解决方案1】:

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

    【讨论】:

    • 我希望 NMS 包含一个管理 API,但现在这完成了我所需要的。谢谢你的提示,蒂姆!
    • NMS 不可能包含管理 API,因为代理是基于 Java 并通过 JMX 管理的。如果您想创建一个开源库以通过 .NET 与 JMX 进行通信,那么我们可以,但在此之前,在基于 NMS 的客户端中可以做的事情是有限的。您可以编写一些基于 java 的库来执行您需要的管理任务,并通过 IKVM 在您的 .NET 应用程序中运行它们。
    【解决方案2】:

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

    ISession consumerSession = = connection.CreateSession(AcknowledgementMode.Transactional);
    

    然后你可以使用:

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

    或:

    //on failure, back on queue
    consumerSession.Rollback();
    

    【讨论】:

    • 删除所有消息是我的意思。交易服务于不同的目的。 Tim Bish 已经回答了我的问题。
    猜你喜欢
    • 2011-03-03
    • 2020-04-23
    • 2010-11-06
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多