我正在尝试使用IBM XMS for .NET发送文本消息。发送大约254条消息后,我收到以下错误:
An unhandled exception of type 'IBM.XMS.XMSException' occurred in IBM.XMS.Client.WMQ.dll
Additional information: CWSMQ0082E: Failed to send to CompCode: 2, Reason: 2017.
google上并没有太多关于它的信息。我在WSMQ Queue Limit
找到了一篇相关的帖子该帖子表明最大队列存在某种限制。帖子中的链接似乎不起作用。我该如何克服这个错误?
答案 0 :(得分:2)
MQ有一个命令mqrc
,它返回任何原因代码或消息代码的文本。 2017年意味着MQRC_HANDLE_NOT_AVAILABLE
。可以通过转到Knowledge Center并在2017年进行搜索来获得更好的解释。这将返回几页API调用,这些页面可以返回2017,以及原因代码本身的页面:
2017 (07E1) (RC2017): MQRC_HANDLE_NOT_AVAILABLE
该页面提供了以下问题描述:
<强>解释强>
发出了MQOPEN,MQPUT1或MQSUB调用,但是 当前任务允许的最大打开句柄数 已经达成了。请注意,当分发列表是 在MQOPEN或MQPUT1调用上指定,分发中的每个队列 list使用一个句柄。
我们从文档中了解到,并且可以从MQ Explorer的QMgr扩展属性面板确认,默认情况下,允许任何进程的最大句柄为256.
基于这一切以及你的程序在254条消息之后死亡,结论是它正在抓取每条消息PUT
的新句柄,而不是释放它们。
通常,当存在应该仅包含 PUT
和COMMIT
但仍包含OPEN
的循环时会发生这种情况。我建议您仔细检查您的代码,也可以更新您的问题,以便在此处发布代码。
我还建议研究MQ .Net示例程序或使用其中一个作为您自己代码的基础。