当消息无法发布到带有 MQRC 2056 MQRC_Q_SPACE_NOT_AVAILABLE 的 WebSphere MQ 队列时,它会进入死信队列。这意味着我们为队列使用分配的原始磁盘空间是 100%。假设文件系统/var/mqm 有足够的空闲队列存储空间。甚至我们的死信队列存储也在同一个/var/mqm 中。如果我们已经得到 MQRC 2056 - MQRC_Q_SPACE_NOT_AVAILABLE,那么当消息的磁盘空间已满时,它怎么可能进入死信队列?
最佳答案
在您的情况下, MQRC_Q_SPACE_NOT_AVAILABLE
实际上确实反射(reflect)了磁盘分区中的总空间量,但并非在所有情况下都是如此。例如,对于较旧的文件系统,最大文件大小可能为 2GB,即使分区最多可容纳约 1TB。因此,如果单个队列文件达到 2GB,QMgr 可能在分区中仍有足够的空间可用于将消息重新排队到 DLQ。尽管较新的文件系统已经消除了 2GB 文件限制,但 WebSphere MQ 仍然支持许多具有每个文件 2GB 限制的文件系统。在不存在此限制的平台上(或者在任何情况下,当整个分区空间不足时,无论平台如何),该行为都没有危害。在那些重新排队可能成功的平台上,您观察到的行为是合适的,甚至是可取的。
因此,耗尽单个队列文件的空间与耗尽分区中的所有文件空间之间存在差异。 WebSphere MQ 可以查询文件系统的各个方面以详细确定导致错误的情况,但这会增加代码的复杂性。简单快速的是在操作系统返回空间不足错误时尝试重新排队。如果分区有可用空间,则重新排队工作。如果没有,那么该应用程序不会比重新排队尝试之前更糟。
关于ibm-mq - MQRC 2056 - MQRC_Q_SPACE_NOT_AVAILABLE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5250002/