我不熟悉MQ,所以请原谅我,如果我没有正确解释自己。我们在队列中收到一条消息,该队列在使用2110 MQRC_FORMAT_ERROR读取时失败。似乎问题是它没有“格式化”的格式。指定的,例如我们期待' MQSTR'。客户端代码(C#)正在捕获MQException并执行MQQueueManager.Backout(),但是消息只是返回队列并被客户端再次读取和拒绝。
查看队列,我看到它没有设置回退队列或回退阈值。队列管理器也没有死信队列集。所以我所做的就是设置DLQ并将队列的回退队列设置为退出阈值为5.然而,该消息仍然卡在队列中,不断读取并放回。该邮件的撤销计数目前接近2000万。
我想要退出和DLQ工作但是如果有另一种方法只是手动删除或移动此消息,这将有助于现在。这只是一个测试信息,所以如果我们失去它就没关系。
编辑:我必须清除队列才能让事情发生变化,所以不幸的是,在它再次发生之前可能无法测试任何解决方案。
答案 0 :(得分:4)
MQ本机客户端不会自动将错误消息移至BackoutQ
或DLQ
。应用程序必须编写其他代码才能将邮件移至DLQ
或Backout queue
。但是,XMS .NET和JMS客户端可以完成这项工作。 XMS .NET是C#语言中的JMS规范实现。 XMS .NET与MQ Clients包捆绑在一起。
来到你的案子:
MQRC_FORMAT_ERROR实际上并不是一个错误,它是一个警告告诉应用程序MQ客户端无法转换传入消息并且它向应用程序传递了一个未转换的消息。应用程序必须处理此异常,不应回滚此类消息。您需要调查发送此类消息的应用程序并解决任何问题。
请参阅文档here。