如何在IBM WAS上获取jms主题中的当前消息数

我需要用 Java 编程语言创建一个 REST 服务,该服务接收 JMS 连接工厂的 JNDI 名称和 JMS 主题的 JNDI 名称作为输入,并且应该返回此时资源中的消息数。问题是从 IBM WAS 获取主题的长度。

我知道来自 Oracle 的 TopicBrowser 的存在,您可以使用它获取主题中的所有消息并计算它们的数量。但出于某种原因,我们不使用它。

我的想法是获取 SIB Destination queue length 属性,该属性位于 Web 控制台中的 Buses> Bus> Recipients> MyTopic.Space> Publication Points 中。

我使用:
IBM WAS 9.0。无损检测。
默认消息提供程序。

我很乐意接受任何建议。


GCT1015
浏览 73回答 1
1回答

茅侃侃

您可以使用管理客户端获取订阅者的状态,例如:                          // Start by querying the objectName of the Publication Point (Topic Space on a specific node).         AdminClient adminClient = AdminClientFactory.createAdminClient(connectProps);         StringBuffer oNameQuery= new StringBuffer();                 oNameQuery.append(adminClient.getDomainName()).append(":*");         oNameQuery.append(",type=").append("SIBPublicationPoint");         oNameQuery.append(",name=").append("Default.Topic.Space");         oNameQuery.append(",node=").append(nodeName);          oNameQuery.append(",process=").append("server1");          oSet= adminClient.queryNames(new ObjectName(oNameQuery.toString()), null);          ObjectName defaultTopicSpaceOn = (ObjectName) oSet.iterator().next();         System.out.println("Default.Topic.Space ObjectName:"+defaultTopicSpaceOn);        // Then look at each subscription storing messages in the Publication Point.        Long depth = (Long) adminClient.invoke (defaultTopicSpaceOn, "getDepth", null, null);        System.out.println("DefaultTopicSpace Depth:"+depth+"\n");        SIBSubscription[] subscriptions = (SIBSubscription[]) adminClient.invoke (defaultTopicSpaceOn, "getSubscriptions", null, null);        for (SIBSubscription subscription : subscriptions) {          System.out.print("DefaultTopicSpace Subscription:"+subscription.getName()                              +" Id:"+subscription.getId()                             +" SubscriberId:"+subscription.getSubscriberId()                             +" Selector:"+subscription.getSelector()                             +" Depth:"+subscription.getDepth());          for (String topicName: subscription.getTopics())            System.out.print(" Topic:"+topicName);          System.out.println();        }这会产生类似的东西:默认主题空间深度:2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java