2013-10-28 72 views
0

我对MQ不熟悉,因此如果我没有正确解释自己,请原谅我。使用2110 MQRC_FORMAT_ERROR读取失败的队列时,我们收到了一条消息。看起来问题在于它没有指定“格式”,例如,我们期待'MQSTR'。客户端代码(C#)捕获MQException并执行MQQueueManager.Backout(),但是该消息刚刚返回队列并被客户端读取并再次拒绝。WebSphere MQ .NET客户端 - 退出队列不起作用

看着队列,我看到它没有设置退出队列或退出阈值。队列管理器也没有设置死信队列。因此,我所做的就是设置DLQ,并设置队列的退出队列,退出阈值为5.但是,消息仍然滞留在队列中不断读取并放回。该消息的退出计数目前接近2000万。

我想要取消退出和DLQ工作,但是如果有另一种方法只是手动删除或移动此消息,这将有助于现在。这只是一个测试信息,所以如果我们失去它并不重要。

编辑:我不得不清除队列来移动东西,所以不幸的是可能无法测试任何解决方案,直到它再次发生。

回答

3

MQ本机客户端不会自动将错误消息移动到BackoutQDLQ。应用程序必须编写额外的代码将消息移动到DLQBackout queue。但是,XMS .NET和JMS客户端完成这项工作。 XMS .NET是C#语言中的JMS规范实现。 XMS .NET与MQ客户端软件包捆绑在一起。

来到你的情况:

MQRC_FORMAT_ERROR实际上不是一个错误,这是告知MQ客户端无法进入的消息转换应用的警告,并将其交给一个未转换的消息给应用程序。应用程序必须处理此异常,并且不应回滚此类消息。您需要调查发送此类消息的应用程序并解决所有问题。

请参阅文档here

+0

非常感谢。这非常有帮助。 – Bert