JMS客户端不接收消息

时间:2009-10-02 21:31:33

标签: java glassfish jms

我正在使用Glassfish JMS。

我可以将消息添加到队列中。 我可以使用QueueBrowser对象查看消息。 但是,MessageConsumer(也不是QueueReceiver)无法接收任何消息并返回null。 消息过期设置为0,我记得打开连接。

有什么想法吗?

以下是代码:

      Session session = null;
      Connection conn = null;

      try
      {
         InitialContext jndi = new InitialContext();

            ConnectionFactory qFactory = (ConnectionFactory)jndi.
                lookup("myConnectionFactory");
              conn = qFactory.createConnection();
              conn.start();
         Queue queue = (Queue)jndi.lookup("myQueueName");
         session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);


          QueueReceiver  mc = ((QueueSession)session).createReceiver(queue);

         Object  m = mc.receive(2000);
         //m is NULL!

         QueueBrowser browser = session.createBrowser(queue);


         for(Enumeration e = browser.getEnumeration(); e.hasMoreElements(); )
         {
             //there are many messages here...
         }

3 个答案:

答案 0 :(得分:1)

拥有客户端代码会很好。

在发送方没有正确提交/关闭连接时,发生了类似的事情。使用管理控制台时,该消息将可见,但尚未提供给MDB。

希望它有所帮助。

答案 1 :(得分:0)

此代码是否在appserver中运行?如果是,我将通过注释获得所需的对象,对于消息接收器,我将使用MDB。 如果这是一段独立的代码,我有一段时间让一个基于JNDI的客户端工作,我恢复使用“原始”Java API。

答案 2 :(得分:0)

我目睹了第一次会话提交后发生的相同行为,这意味着在正确接收的消息之前。在我的情况下,问题是我在保持同一会话的同时重新创建了接收器。 正如this article中指出的那样:

  

创建临时目的地,消费者,生产者和连接   是所有与代理同步的请求 - 响应操作   应该避免处理每个请求,因为它会产生大量的请求   与JMS经纪人聊天。

解决方案就像重复使用相同的接收器一样简单。