以编程方式使用任何API获取JMS队列的消息计数

时间:2015-01-27 12:38:12

标签: java jboss jms

我在JBoss 5中使用持久性创建了一个队列。消息是异步使用的,所以我想要的是每次重新启动服务器时队列中已有的消息数。我可以在jmx-console上看到消息计数(屏幕附加)。我希望在我的程序中使用此消息计数。

ScreenShot

2 个答案:

答案 0 :(得分:4)

您可以尝试使用jmx作为@ konstantin-v-salikhov建议。

来自同一个jvm(例如来自战争):

MBeanServerConnection mbeanServer = MBeanServerLocator.locateJBoss();
ObjectName queue = new ObjectName ("jboss.messaging.destination:service=Queue,name=testQueue" );  
Integer messageCount = (Integer)server.getAttribute ( queue, "MessageCount" );  
System.out.println ( messageCount ); 

远程访问:

Hashtable<String,String> ht=new Hashtable<String,String>();
ht.put(Context.INITIAL_CONTEXT_FACTORY,"org.jboss.security.jndi.JndiLoginInitialContextFactory");
ht.put(Context.PROVIDER_URL,"localhost:1099");
ht.put(Context.SECURITY_PRINCIPAL,"admin");
ht.put(Context.SECURITY_CREDENTIALS,"admin");

Context context = new InitialContext(ht);

MBeanServerConnection mbeanServer = (MBeanServerConnection)context.lookup ( "jmx/invoker/RMIAdaptor" );  
ObjectName queue = new ObjectName ("jboss.messaging.destination:service=Queue,name=testQueue" );  
Integer messageCount = (Integer)server.getAttribute ( queue, "MessageCount" );  
System.out.println ( messageCount ); 

答案 1 :(得分:1)

您可以创建QueueBrowser来查看队列中的消息。 http://docs.oracle.com/javaee/7/api/javax/jms/QueueBrowser.html