MQJE001:IBM 中的完成代码“2”,原因“2033”问题仅用于获取一些消息
MQJE001: Completion Code '2', Reason '2033' issue in IBM Only For Getting Some Messages
我目前正在从一个充满事务(消息)的远程 queue 读取数据。我正在通过访问 queue 并测量记录的大小来阅读它。
getOptions.options = MQC.MQGMO_CONVERT + MQC.MQGMO_WAIT;
queue.getCurrentDepth();
仅当 queue 的大小大于 0 时。我继续接收消息。
我的问题是,对于某些消息,我收到以下错误:
MQJE001:完成代码“2”,原因“2033”。
但仅针对某些消息,有趣的是我有一个自定义重试变量,第三次重试得到一条空白消息。
我可能的解决方案:
起初我以为它可能是 waitInterval,我一直在将它从 150 毫秒更改为 30 秒。对于某些消息,我在不到 100 毫秒的时间内正确接收了它们。但是给我出问题的消息把所有的waitInterval都给了然后报错第三次重试得到空白消息
第二个测试是验证 MQMessage class 的参数,我原来有:
- 消息类型:8
- 编码:273
- 格式:
- 字符集:0
当我正确收到消息时,以下参数仍然存在:
- 消息类型:8
- 编码:273
- 格式:MQSTR
- 字符集:819
当我在第三次重试时收到导致错误 2033 的消息时,我收到一条空白消息并且参数更改为以下内容:
- 消息类型:8
- 编码:273
- 格式:
- 字符集:819
我开始认为 queue 中的消息没有指明正确的格式。所以我联系了支持人员,他们确认所有消息都具有正确的转换 headers.
所以我仍然怀疑为什么会出现这个问题,如果有人遇到过类似的问题,将不胜感激。谢谢。
您将 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());
}
}
我目前正在从一个充满事务(消息)的远程 queue 读取数据。我正在通过访问 queue 并测量记录的大小来阅读它。
getOptions.options = MQC.MQGMO_CONVERT + MQC.MQGMO_WAIT;
queue.getCurrentDepth();
仅当 queue 的大小大于 0 时。我继续接收消息。
我的问题是,对于某些消息,我收到以下错误: MQJE001:完成代码“2”,原因“2033”。
但仅针对某些消息,有趣的是我有一个自定义重试变量,第三次重试得到一条空白消息。
我可能的解决方案:
起初我以为它可能是 waitInterval,我一直在将它从 150 毫秒更改为 30 秒。对于某些消息,我在不到 100 毫秒的时间内正确接收了它们。但是给我出问题的消息把所有的waitInterval都给了然后报错第三次重试得到空白消息
第二个测试是验证 MQMessage class 的参数,我原来有:
- 消息类型:8
- 编码:273
- 格式:
- 字符集:0
当我正确收到消息时,以下参数仍然存在:
- 消息类型:8
- 编码:273
- 格式:MQSTR
- 字符集:819
当我在第三次重试时收到导致错误 2033 的消息时,我收到一条空白消息并且参数更改为以下内容:
- 消息类型:8
- 编码:273
- 格式:
- 字符集:819
我开始认为 queue 中的消息没有指明正确的格式。所以我联系了支持人员,他们确认所有消息都具有正确的转换 headers.
所以我仍然怀疑为什么会出现这个问题,如果有人遇到过类似的问题,将不胜感激。谢谢。
您将 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());
}
}