如何在IBM WAS上获取jms主题中的当前消息数
How to get the current number of messages in a jms topic on IBM WAS
我需要使用 Java 编程语言创建一个 REST 服务,该服务接收 JMS 连接工厂的 JNDI 名称和 JMS 主题的 JNDI 名称作为输入,并且应该 return 资源中的消息数位于此时此刻。
问题是从 IBM WAS 获取主题的长度。
我知道 Oracle 的 TopicBrowser 的存在,您可以使用它获取主题中的所有消息并计算它们的数量。但出于某种原因,我们不使用它。
我的想法是获取SIB Destination队列长度属性,它位于:
总线 > 总线 > 收件人 > MyTopic.Space> 发布点,在 Web 控制台中。
我使用:
IBM 是 9.0。 ND.
默认消息提供程序。
我很乐意接受任何建议。
您可以使用管理客户端获取订阅者的状态,例如:
// 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();
}
这会产生如下内容:
默认主题空间Depth:2
DefaultTopicSpace Subscription:Default.Topic.Space Id:21974964F5B726A6C21C7E59 SubscriberId:jmsThinClient.JMSSendReceiveclientID##jmsThinClient.JMSSendReceiveSubscription Selector:null Depth:2 Topic:Topic1/*
我需要使用 Java 编程语言创建一个 REST 服务,该服务接收 JMS 连接工厂的 JNDI 名称和 JMS 主题的 JNDI 名称作为输入,并且应该 return 资源中的消息数位于此时此刻。 问题是从 IBM WAS 获取主题的长度。
我知道 Oracle 的 TopicBrowser 的存在,您可以使用它获取主题中的所有消息并计算它们的数量。但出于某种原因,我们不使用它。
我的想法是获取SIB Destination队列长度属性,它位于: 总线 > 总线 > 收件人 > MyTopic.Space> 发布点,在 Web 控制台中。
我使用:
IBM 是 9.0。 ND.
默认消息提供程序。
我很乐意接受任何建议。
您可以使用管理客户端获取订阅者的状态,例如:
// 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();
}
这会产生如下内容:
默认主题空间Depth:2
DefaultTopicSpace Subscription:Default.Topic.Space Id:21974964F5B726A6C21C7E59 SubscriberId:jmsThinClient.JMSSendReceiveclientID##jmsThinClient.JMSSendReceiveSubscription Selector:null Depth:2 Topic:Topic1/*