【问题标题】:JMS client does not receive messagesJMS 客户端不接收消息
【发布时间】:2010-12-03 11:18:43
【问题描述】:

我正在使用 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...
         }

【问题讨论】:

  • 任何代码要显示?它可能会帮助您了解...

标签: java glassfish jms


【解决方案1】:

如果有客户端代码就好了。

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

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    此代码是否在应用服务器中运行?如果是这样,我将通过注释获取所需的对象,对于消息接收器,我将使用 MDB。 如果这是一段独立代码,那么我在让基于 JNDI 的客户端工作时遇到了麻烦,我恢复使用“原始”Java API。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-10
        • 2018-08-06
        • 2020-12-18
        • 1970-01-01
        • 2021-05-23
        • 2021-06-07
        相关资源
        最近更新 更多