为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

肥皂起泡泡 2023-05-17 14:38:06
我目前正在从一个充满事务(消息)的远程队列中读取数据。我通过访问队列和测量记录的大小来阅读它。getOptions.options = MQC.MQGMO_CONVERT + MQC.MQGMO_WAIT;queue.getCurrentDepth();仅当队列的大小大于 0 时。我继续获取消息。我的问题是,对于某些消息,我收到以下错误:MQJE001:完成代码“2”,原因“2033”。但仅对于某些消息,有趣的是我有一个自定义重试变量,第三次重试得到一条空白消息。我可能的解决方案:起初我以为它可能是 waitInterval,我一直在将它从 150 毫秒更改为 30 秒。对于某些消息,我在不到 100 毫秒的时间内正确接收了它们。但是给我问题的消息占用了所有的waitInterval然后给出错误并得到空白消息到第三次重试。第二个测试是验证 MQMessage 类的参数,我原来有:消息类型:8编码:273格式:字符集:0当我正确收到一条消息时,以下参数仍然存在:消息类型:8编码:273格式:MQSTR字符集:819当我在第三次重试时收到导致错误 2033 的消息时,我收到一条空白消息并且参数更改为以下内容:消息类型:8编码:273格式:字符集:819我开始认为队列中的消息没有指示正确的格式。所以我联系了支持人员,他们确认所有消息都具有正确的转换标头。所以我仍然怀疑为什么这个问题,如果有人遇到过类似的事情,我会很感激你的评论。谢谢。
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

您将 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());

   }

}



查看完整回答
反对 回复 2023-05-17
  • 1 回答
  • 0 关注
  • 208 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信