使用任何 API 以编程方式获取 JMS 队列的消息计数
Getting Message Count of a JMS queue Programmatically using any API
我已经在 JBoss 5 中持久地创建了一个队列。消息是异步使用的,所以我想要的是每次重新启动服务器时已经在队列中的消息数。我可以在 jmx-console 上看到消息计数(附截图)。我想在我的程序中使用此消息计数。
您可以创建一个 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 );
我已经在 JBoss 5 中持久地创建了一个队列。消息是异步使用的,所以我想要的是每次重新启动服务器时已经在队列中的消息数。我可以在 jmx-console 上看到消息计数(附截图)。我想在我的程序中使用此消息计数。
您可以创建一个 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 );