【问题标题】:How do I remove messages from a JBoss JMS Topic?如何从 JBoss JMS 主题中删除消息?
【发布时间】:2009-05-28 13:03:12
【问题描述】:

我在 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。

谁能帮忙?
谢谢。

【问题讨论】:

    标签: jboss jms


    【解决方案1】:

    经过大量搜索,我终于想出了这个方法。

    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();
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2013-05-28
      • 2013-09-30
      • 1970-01-01
      • 2019-12-06
      • 2012-03-20
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 2011-01-29
      相关资源
      最近更新 更多