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

Getting Message Count of a JMS queue Programmatically using any API

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

ScreenShot

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

您可以按照@konstantin-v-salikhov 的建议尝试使用 jmx。

来自同一个 jvm(例如来自 war):

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 );