我正在尝试将简单的字符串消息写入队列。 MaxMsgLength
队列的属性设置为 4 kb。该消息有 2700 个字符,当我尝试放入队列时,我收到 2030 (07EE) (RC2030):MQRC_MSG_TOO_BIG_FOR_Q
异常(exception)。我没有做任何特殊类型的编码,因此应该使用 Windows 的默认值。
我想知道如何确定我应该在 MaxMsgLength
中给出的值属性(property)。如何计算。
最佳答案
请记住 MaxMsgLength
队列定义中指定的不仅包括有效负载,还包括消息头和您设置的任何属性。如果您查看信息中心 MQ_* (String Lengths)
页面并查找 MQ_MSG_HEADER_LENGTH
您将看到仅 MQMD 就有 4000 个字节。所以如果你设置 MaxMsgLength
到 4k 的队列中,您可以拥有的最大有效负载是 96 字节。如果有问题的队列是传输队列,则需要队列大小加上 MQXQH
的大小。传输队列头。
要具体回答帖子标题中的问题,您可以找到MaxMsgLength
有两种方式。在视觉上,通过显示队列属性。以编程方式,在打开队列时将“查询”添加到打开选项中,并使用 MQInq
API 调用。然后将 MQMD
的总和相加,您添加的任何属性(包括包含它们但未在操作它们的 API 调用中返回的 XML 结构)以及任何标题,例如 RFH2
(如果队列设置为使用它而不是 native 属性),MQXQH
, MQDLQ
, 等等。
关于ibm-mq - 如何确定队列的 `MaxMsgLength`的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303438/