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