为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

GCT1015 2023-06-14 15:57:11
我需要用 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。无损检测。默认消息提供程序。我很乐意接受任何建议。
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

您可以使用管理客户端获取订阅者的状态,例如:


                          // 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


查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 71 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信