当前位置: 首页 > 知识库问答 >
问题:

MQJE001:完成代码“2”,原因“2033”在IBM中仅用于获取一些消息

宋望
2023-03-14

我当前正在从一个远程队列读取,该队列中填充了事务(消息)。我正在通过访问队列和测量记录的大小来读取它。

但只有一些消息,有趣的是,我有一个自定义的重试变量,第三次重试得到一个空白消息。

我可能的解决方案:

起初,我认为它可能是waitInterval,我一直将它从150毫秒改为30秒。对于某些消息,我在不到100毫秒的时间内正确地得到它们。但是给我带来问题的消息会占用所有的waitInterval,然后给出错误并在第三次重试时得到空白消息。

    null

当我正确获得消息时,以下参数仍然存在:

  • 消息类型:8
  • 编码:273
  • 格式:mqstr
  • 字符集:819

当我在第三次重试时收到一条导致错误2033的消息时,我会得到一条空白消息,并且参数更改为以下内容:

    null

共有1个答案

洪子晋
2023-03-14

您将IBM MQ视为一个数据库,这将给您带来各种痛苦。

以下是检索消息的方式:

MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = CMQC.MQGMO_WAIT + CMQC.MQGMO_FAIL_IF_QUIESCING;
gmo.waitInterval = 5000;  // wait up to 5 seconds
MQMessage receiveMsg = null;
boolean getMore = true;

while(getMore)
{
   receiveMsg = new MQMessage();

   try
   {
      // get the message on the queue
      queue.get(receiveMsg, gmo);

      /*
       * Now go do something with the message
       */
   }
   catch (MQException e)
   {
      if ( (e.completionCode == CMQC.MQCC_FAILED) &&
           (e.reasonCode == CMQC.MQRC_NO_MSG_AVAILABLE) )
      {
         // No message - loop again
      }
      else
      {
         System.out.println("MQException: " + e.getLocalizedMessage());
         System.out.println("CC=" + e.completionCode + " : RC=" + e.reasonCode);
         getMore = false;
      }
   }
   catch (IOException e)
   {
      System.out.println("IOException:" +e.getLocalizedMessage());
   }
}
 类似资料: