如何确定队列的“MaxMsgLength”的值

时间:2014-04-25 21:34:01

标签: ibm-mq

我正在尝试将简单的字符串消息写入队列。队列的MaxMsgLength属性设置为4 kb。该消息有2700个字符,当我尝试进入队列时,我得到2030(07EE)(RC2030):MQRC_MSG_TOO_BIG_FOR_Q异常。我没有做任何特殊的编码,因此应该使用Windows的默认值。

我想知道如何确定我应该在MaxMsgLength属性中给出的值。如何计算。

2 个答案:

答案 0 :(得分:3)

请记住,队列定义中指定的MaxMsgLength不仅包括有效负载,还包括消息头您设置的任何属性。如果您检查信息中心MQ_* (String Lengths)页面并查找MQ_MSG_HEADER_LENGTH,您将看到单独的MQMD是4000字节。因此,如果将队列的MaxMsgLength设置为4k,则可以拥有的最大有效负载为96字节。如果有问题的队列是传输队列,则需要队列大小加上MQXQH传输队列头的大小。

要专门回答帖子标题中的问题,您可以通过两种方式找到MaxMsgLength。在视觉上,通过显示队列属性。以编程方式添加"查询"打开队列并使用MQInq API调用时打开选项。然后添加MQMD的总和,您添加的任何属性(包括包含它们的XML结构,但不会在操作它们的API调用中返回)以及任何标题,例如RFH2(如果队列设置为使用而不是本机属性),MQXQHMQDLQ等。

答案 1 :(得分:2)

不确定您在应用程序中使用的语言。假设它是C,请检查您在MQPUT调用中指定的 BufferLength 参数值。

此IBM MQ信息中心link解释了您可能遇到2030错误和可能的补救措施的情况。