【发布时间】:2012-10-25 10:24:49
【问题描述】:
我正在尝试使用 ANSI-C 和 MQGET 函数从队列中接收消息。问题是我总是收到错误 2010 (MQRC_DATA_LENGTH_ERROR)。
我发现此错误与 MQGET 调用的参数 7 (DataLength) 有关。我队列上的消息有 7157460 字节。我用于 MQGET 的通道将“最大消息长度”设置为 104857600(以及保存消息的队列)。
我什至使用了这个例子中的 MQGET: http://www.capitalware.biz/dl/code/c/msg2file.zip
我仍然得到错误 2010。我做错了什么?我应该以某种方式增加 MQSERVER 环境变量中消息的最大大小吗?
MQGET 调用:
/* ... */
MQLONG messlen; /* message length received */
MQGET(Hcon, /* connection handle */
Hobj, /* object handle */
&md, /* message descriptor */
&gmo, /* get message options */
buflen, /* pBuffer length */
pBuffer, /* pointer to message buffer */
&messlen, /* message length */
&CompCode, /* completion code */
&Reason); /* reason code */
【问题讨论】:
-
您使用的是什么版本的 MQ? 2010 年的文档说“DataLength 参数无效。参数指针无效,或者它指向只读存储。(并不总是可以检测到无效的参数指针;如果未检测到,则结果不可预测如果 BufferLength 参数超过为客户端通道协商的最大消息大小,则此原因也可以在 MQGET、MQPUT 或 MQPUT1 调用上返回给 MQ MQI 客户端程序。”因此,请检查是否属于这种情况。
-
我不知道您的配置,但我在 z/OS 上,其中 >4MB 是单独购买的选项。所以在这里它永远不会起作用!这也是你的问题吗?
-
我在 Unix 上使用 Websphere MQ 7.5。 MQGET 程序位于另一个 unix (AIX) 上。我已阅读有关此问题的文档,但这些对我无效。尝试从我在帖子中提供的 msg2file 中读取源代码。