我正在尝试将简单的字符串消息写入队列。队列的MaxMsgLength
属性设置为4 kb。该消息有2700个字符,当我尝试进入队列时,我得到2030(07EE)(RC2030):MQRC_MSG_TOO_BIG_FOR_Q
异常。我没有做任何特殊的编码,因此应该使用Windows的默认值。
我想知道如何确定我应该在MaxMsgLength
属性中给出的值。如何计算。
答案 0 :(得分:3)
请记住,队列定义中指定的MaxMsgLength
不仅包括有效负载,还包括消息头和您设置的任何属性。如果您检查信息中心MQ_* (String Lengths)
页面并查找MQ_MSG_HEADER_LENGTH
,您将看到单独的MQMD是4000字节。因此,如果将队列的MaxMsgLength
设置为4k,则可以拥有的最大有效负载为96字节。如果有问题的队列是传输队列,则需要队列大小加上MQXQH
传输队列头的大小。
要专门回答帖子标题中的问题,您可以通过两种方式找到MaxMsgLength
。在视觉上,通过显示队列属性。以编程方式添加"查询"打开队列并使用MQInq
API调用时打开选项。然后添加MQMD
的总和,您添加的任何属性(包括包含它们的XML结构,但不会在操作它们的API调用中返回)以及任何标题,例如RFH2
(如果队列设置为使用而不是本机属性),MQXQH
,MQDLQ
等。
答案 1 :(得分:2)
不确定您在应用程序中使用的语言。假设它是C,请检查您在MQPUT调用中指定的 BufferLength 参数值。
此IBM MQ信息中心link解释了您可能遇到2030错误和可能的补救措施的情况。