簡體   English   中英

如何從JBoss JMS主題中刪除消息?

[英]How do I remove messages from a JBoss JMS Topic?

我已經在jbossmq-destinations-service.xml中配置了我的主題,如下所示:

<mbean code="org.jboss.mq.server.jmx.Topic"
    name="jboss.mq.destination:service=Topic,name=myTopicName">
  <depends optional-attribute-name="DestinationManager">
           jboss.mq:service=DestinationManager</depends>
  <depends optional-attribute-name="SecurityManager">
           jboss.mq:service=SecurityManager</depends>
  <attribute name="SecurityConf">
    <security>
      <role name="guest" read="true" write="true" create="true"/>
      <role name="publisher" read="true" write="true" create="false"/>
      <role name="durpublisher" read="true" write="true" create="true"/>
    </security>
  </attribute>
</mbean>

我可以很容易地連接到題目做對主題名稱JNDI查找,發布消息,一切工作正常。

但是,我希望能夠按一定的時間間隔清除消息,因為根據某些其他系統功能,消息可能已過時,但是我找不到任何示例或說明。

問題是,當我在主題上進行JNDI查找時,它返回org.jboss.mq.SpyTopic,它沒有任何用於刪除消息或什至找不到多少消息的功能。 所有示例似乎都暗示org.jboss.mq.server.JMSTopic具有所有功能,但我不知道如何將SpyTopic轉換為JMSTopic或如何設置主題以便JNDI查找將返回一個JMSTopic。

有人可以幫忙嗎?
謝謝。

最終,經過大量搜索,我想到了這種方法。

public static void removeAllMessagesFromTopic(String topicName)
{
    try
    {
        //==============================================================
        // Set up the name of the topic object.
        // Alternative way:
        // objName = new ObjectName(
        //     "jboss.mq.destination:service=Topic,name=" + topicName);
        //==============================================================
        String domain = "jboss.mq.destination";
        Hashtable<String, String> keys = new Hashtable<String, String>();
        keys.put("service", "Topic");
        keys.put("name", topicName);
        ObjectName objName = new ObjectName(domain, keys);

        //==============================================================
        // Get the MBean server
        //==============================================================
        MBeanServer server = (MBeanServer)MBeanServerFactory
                .findMBeanServer(null).iterator().next();

        //==============================================================
        // Invoke the MBean
        //==============================================================
        Integer msgCount = (Integer)server.getAttribute(objName, "AllMessageCount");

        log.debug("Invoking removeAllMessages. (" + msgCount + "messages)");

        server.invoke(objName, "removeAllMessages",
                new Object[] {},  // No paramaters needed for removeAllMessages
                new String[] {});

        log.debug("Messages removed.");
    }
    catch (Exception ex)
    {
        log.error("Failed to remove messages from topic. Exception: " + ex);
        ex.printStackTrace();
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM