无法在WebSphere MQ队列中查看JMS消息

3

我正在尝试将一些JMS代码中的消息放入本地队列管理器中定义的本地队列LQ中。我已经在WebSphere MQ中定义了这个本地队列并使用JMS代码来放置消息。请问我做得对吗?但我在WebSphere队列中没有看到这些消息。

以下是代码:

try {
    MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
    //set up the Connection Configuration values

    // Set the properties
      cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, "HostName");
      cf.setIntProperty(WMQConstants.WMQ_PORT, 1414);
      cf.setStringProperty(WMQConstants.WMQ_CHANNEL, "SYSTEM.DEF.SVRCONN");
      cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
      cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, "TEST.JMS");

    //JNDI is Not used Here
    MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();

    MQQueueSession session = (MQQueueSession) connection.createQueueSession(true, Session.CLIENT_ACKNOWLEDGE);
    MQQueue queue = (MQQueue) session.createQueue("queue:///LQ");
    MQQueueSender sender = (MQQueueSender) session.createSender(queue);
    MQQueueReceiver receiver = (MQQueueReceiver) session.createReceiver(queue);

    long uniqueNumber = System.currentTimeMillis() % 1000;

    JMSTextMessage message = (JMSTextMessage) session.createTextMessage("MQJMSTest "+ uniqueNumber);  
    //MQMessage message =  (MQMessage) session.createTextMessage("MQJMSTest "+ uniqueNumber);


    // Start the connection
    connection.start();

    sender.send(message);
    System.out.println("Sent message:\\n" + message);

    //JMSMessage receivedMessage = (JMSMessage) receiver.receive(10000);
    // System.out.println("\\nReceived message:\\n" + receivedMessage);

    sender.close();
    receiver.close();
    session.close();
    connection.stop();
    connection.close();

    System.out.println("\\nSUCCESS\\n");

} catch (JMSException e) {
    // TODO Auto-generated catch block
    //e.printStackTrace();
    System.out.println(e);
    System.out.println("\\nFAILURE\\n");
}
  catch (Exception e){
      System.out.println(e);
      System.out.println("\\nFAILURE\\n");
} 
1个回答

3
根据此,您已创建了一个事务会话:
    connection.createQueueSession(true, Session.CLIENT_ACKNOWLEDGE);

根据文档,当应用程序关闭事务会话时,会发生隐式回滚。当应用程序关闭连接时,所有连接的事务会话都会发生隐式回滚。回滚将删除队列上任何消息,在它们在应用程序之外变得可见之前。因此,我认为你可能想要提交事务,是吗?
    sender.send(message);

    // ADD THIS HERE ===========================
    session.commit();
    // ADD THIS HERE ===========================

    System.out.println("Sent message:\\n" + message);

    // THE COMMIT MUST HAVE OCCURRED BEFORE YOU CAN GET THE MESSAGE
    // BACK OUT OF THE QUEUE IN THE NEXT LINES

    //JMSMessage receivedMessage = (JMSMessage) receiver.receive(10000);
    // System.out.println("\\nReceived message:\\n" + receivedMessage);

    // ===================================================
    // DON'T FORGET TO COMMIT THE MESSAGE ON THE WAY BACK OUT OR IT WILL
    // JUST GE TPUT BACK ON THE QUEUE AGAIN.
    // session.commit();
    // ===================================================


    sender.close();
    receiver.close();
    session.close();

PS:请参阅JMS异常处理部分。 JMS异常是一个多层结构,其中预计将供应商特定的诊断放置在较低级别的元素中。 只有通过打印这些较低级别的元素才能知道传输层认为出了什么问题。


非常感谢!你让我开心不已!由于我的异常处理不合适,我根本不知道问题出在哪儿。 - sijo0703

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接