如何从JBossJMS主题中删除消息?
我在jbossmq-destinations-service.xml中配置了我的主题,如下所示:如何从JBossJMS主题中删除消息?,jboss,jms,Jboss,Jms,我在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:serv
<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();
}
}