ibm-mq - 如何确定队列的 `MaxMsgLength`的值

标签 ibm-mq

我正在尝试将简单的字符串消息写入队列。 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/

相关文章:

.net - 如何在 .NET 中从 Websphere MQ 获取事务?

c# - 调用相同的函数直到它连接到服务器

.net - 协商 SSL 连接时出现 IBM MQ 2538 错误

java - 使用JMS将消息放入MQ队列并通过SPLUNK消费消息

c# - 从 .NET Core 应用程序使用 IBMMQ amqmdnet.dll

java - 使用 WMQ API 时是否可以手动设置 JMS 属性?

java - 从独立程序连接 IBM MQ |错误 : ('MQRC_NOT_AUTHORIZED' )

java - 在 Java 中处理 Websphere 多个队列管理器

java - Apache Camel、IBM MQ 集成

apache-camel - Camel JMS 请求-回复,回复消息为 'n'