Java 从队列中读取消息并将其显示给用户?

Java 从队列中读取消息并将其显示给用户?,java,jms,Java,Jms,我首先想知道队列中已经存在多少条消息。下面的类浏览器将返回队列中存在的消息数。现在,我希望用户输入要从队列中读取的消息数量,并仅向客户端显示该数量的消息。我不想读取队列中的所有消息,只想读取用户希望读取的消息数。请检查代码并回答应该做什么 public class Browser { public static void main(String[] args) throws Exception { | // get the initial context |

我首先想知道队列中已经存在多少条消息。下面的类浏览器将返回队列中存在的消息数。现在,我希望用户输入要从队列中读取的消息数量,并仅向客户端显示该数量的消息。我不想读取队列中的所有消息,只想读取用户希望读取的消息数。请检查代码并回答应该做什么

public class Browser
{
    public static void main(String[] args) throws Exception
    {
    |   // get the initial context
    |   InitialContext ctx = new InitialContext();
    |                                                                      
    |   // lookup the queue object
    |   Queue queue = (Queue) ctx.lookup("queue/queue0");
    |                                                                      
    |   // lookup the queue connection factory
    |   QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.
    |       lookup("queue/connectionFactory");
    |                                                                      
    |   // create a queue connection
    |   QueueConnection queueConn = connFactory.createQueueConnection();
    |                                                                      
    |   // create a queue session
    |   QueueSession queueSession = queueConn.createQueueSession(false,
    |       Session.AUTO_ACKNOWLEDGE);
    |                                                                      
    |   // create a queue browser
    |   QueueBrowser queueBrowser = queueSession.createBrowser(queue);
    |                                                                      
    |   // start the connection
    |   queueConn.start();
    |                                                                      
    |   // browse the messages
    |   Enumeration e = queueBrowser.getEnumeration();
    |   int numMsgs = 0;
    |                                                                      
    |   // count number of messages
    |   while (e.hasMoreElements()) {
    |   |   Message message = (Message) e.nextElement();
    |   |   numMsgs++;
    |   }
    |                                                                      
    |   System.out.println(queue + " has " + numMsgs + " messages");
    |                                                                      
    |   // close the queue connection
    |   queueConn.close();
    }
}


To read the number of messages as per user's requirements....
String NUMBER = request.getParameter("number"); 
.......
.......
.......
connection.start();
            for (int s = 0; s <= Integer.parseInt(NUMBER); s++){
             while (true){
                Message m = qReceiver.receive();
                if (m != null){
                    if (m instanceof BytesMessage){
                        BytesMessage bytesMessage = (BytesMessage)m;
                        PrintStream buffer = null;
                        for ( int i = 0; i < (int)bytesMessage.getBodyLength(); i++) {
                            buffer.append((char) bytesMessage.readByte());
                            }
                            String msg = buffer.toString().trim();

                            System.out.println("Reading Message: " + msg);
                       }else if (m instanceof TextMessage){
                        TextMessage textMessage = (TextMessage)m;
                        System.out.println("Reading message: " + textMessage.getText());
                    }else {
                        break;
                    }
公共类浏览器
{
公共静态void main(字符串[]args)引发异常
{
|//获取初始上下文
|InitialContext ctx=新的InitialContext();
|                                                                      
|//查找队列对象
|Queue Queue=(Queue)ctx.lookup(“Queue/queue0”);
|                                                                      
|//查找队列连接工厂
|QueueConnectionFactory connFactory=(QueueConnectionFactory)ctx。
|查找(“队列/连接工厂”);
|                                                                      
|//创建队列连接
|QueueConnection queueConn=connFactory.createQueueConnection();
|                                                                      
|//创建队列会话
|QueueSession QueueSession=queueConn.createQueueSession(false,
|会话(自动确认);
|                                                                      
|//创建队列浏览器
|QueueBrowser QueueBrowser=queueSession.createBrowser(队列);
|                                                                      
|//启动连接
|queueConn.start();
|                                                                      
|//浏览消息
|枚举e=queueBrowser.getEnumeration();
|int numMsgs=0;
|                                                                      
|//统计消息数
|而(e.hasMoreElements()){
||消息消息=(消息)e.nextElement();
|| numsgs++;
|   }
|                                                                      
|System.out.println(队列+“有”+numMsgs+“消息”);
|                                                                      
|//关闭队列连接
|queueConn.close();
}
}
根据用户要求读取消息的数量。。。。
字符串编号=request.getParameter(“编号”);
.......
.......
.......
connection.start();

对于(int s=0;s我假设您使用的是MessageListner,因此一旦出现消息,就会调用OnMessage()方法。在这个方法中,您可以保留一个计数器,一旦这个计数器达到允许的最大值,您就可以调用connection.stop()停止使用队列中的消息


您始终可以通过调用connection.start()重新启动再次说明。

这听起来就像循环一样简单,直到您阅读了N条消息,其中N是用户请求的数字。为什么这对您不起作用,您遇到了什么具体问题?这种类型的功能更多地属于JMS代理的管理功能。查看队列中的#MSG不是JMS规范的一部分。JMS提供了哪些您使用的是哪种类型的管理API?对于这类事情,通常有单独的管理API。例如,TIBCO EMS、ActiveMQ、IBM MQ都有这种类型的管理API。