【问题标题】:message requeue and placing into backout issues消息重新排队并放入回退问题
【发布时间】:2023-04-04 15:14:01
【问题描述】:

我遇到了消息代理 7.0.0.5 的以下问题 这是我的流程:

我想要它做什么: 1.接受一个XML,解析,使用XMLNSC 2.然后我想要执行一些业务逻辑,但是我们跳过它,专注于以下 - 我想抛出两个用户异常 - 一个在模块 GoodReport 中,另一个在模块 BadReport 中, 因此,在 Out 和 Catch 流中处理后, 我假设我的消息将登陆 回退队列(我为我的队列创建了一个,并将阈值设置为 10)并被发送回 MQInput 以便再次处理。 所以我希望 Backout 队列中有 10 条消息,但相反 - 我什么也没得到 ​​p>

我可以看到我的流程中出现了两个错误,但最让我惊讶的是跟踪中的最后几行 - “XMLNS”域是从哪里出现的? 我只使用 XMLNSC 域。

为什么消息没有出现在 Backout 队列中?

提前谢谢你!

塔蒂亚娜。

这是踪迹:

2012-12-17 19:25:54.692283 5756 RecoverableException BIP2488E: ('.Esql6_1Flow_Report.Main', '19.4') 执行 SQL 语句时检测到错误 ''THROW EXCEPTION MESSAGE 3 VALUES ('NO_SUCH_SOURCE');''。 消息代理在执行给定语句时检测到错误。已引发异常以缩短 SQL 程序。 有关错误的详细信息,请参阅以下消息。

2012-12-17 19:25:54.692302 5756 用户异常 ?????????? 3 ????????? BIPmsgs.properties 2012-12-17 19:26:52.830982 5756 错误 BIP2628E:在输入节点“Esql6_1Flow.MQInput”上检测到异常情况。 输入节点“Esql6_1Flow.MQInput”在处理消息时检测到错误。消息流已回滚,如果消息正在工作单元中处理,它将保留在输入队列中以再次处理。以下消息将指示此异常的原因。 检查随后的错误消息以确定生成异常的原因,并按照这些消息的描述采取措施。

2012-12-17 19:26:52.831005 5756 RecoverableException BIP2230E:处理节点“Esql6_1Flow.BadReport”中的消息时检测到错误。 消息代理在处理节点“Esql6_1Flow.BadReport”中的消息时检测到错误。已引发异常以缩短消息的处理时间。 有关错误的详细信息,请参阅以下消息。

2012-12-17 19:26:52.831012 5756 RecoverableException BIP2488E: ('.Esql6_1Flow_Compute.Main', '13.4') 执行 SQL 语句时检测到错误 ''THROW EXCEPTION MESSAGE 3 VALUES ('NO_SUCH_SOURCE');''。 消息代理在执行给定语句时检测到错误。已引发异常以缩短 SQL 程序。 有关错误的详细信息,请参阅以下消息。

2012-12-17 19:26:52.831020 5756 用户异常 ?????????? 3 ????????? BIPmsgs.properties

2012-12-17 19:26:53.831737 5756 错误 BIP2648E:消息退回到队列;节点“Esql6_1Flow.MQInput”。 节点“Esql6_1Flow.MQInput”收到一条消息,由于消息流的主路径中的处理错误,该消息先前已被撤销一次或多次。未连接故障终端,因此消息代理将消息直接放入与此节点关联的重新排队或死信回退队列。消息的 MQMD 'backoutCount' 现在等于为 WebSphere MQ 输入队列定义的 'backoutThreshold'。 检查以前的消息和消息流以确定消息被回退的原因。如果可能,请纠正这种情况。执行所需的任何本地错误恢复处理。

2012-12-17 19:26:53.832435 5756 UserTrace BIP2638I:MQ 输出节点“Esql6_1Flow.MQInput”试图将消息写入连接到队列管理器“”的队列“SYSTEM.DEAD.LETTER.QUEUE”测试队列管理器名称''。 MQCC 为“0”,MQRC 为“0”。

2012-12-17 19:26:53.832466 5756 UserTrace BIP2615I:WebSphere MQ 输入节点“Esql6_1Flow.MQInput”已将消息回退到回退重新队列或死信队列。 消息回退处理已被调用,并且消息已通过写入回退重新队列或死信队列来回退,这由 WebSphere MQ 队列管理器和队列配置确定。 无需用户操作。

2012-12-17 19:27:31.087949 4380 UserTrace BIP2632I:消息已接收并传播到 MQ 输入节点“.InputNode”的“输出”终端。

2012-12-17 19:27:31.088045 4380 UserTrace BIP6060I:代表节点“.InputNode”创建解析器类型“属性”以处理从偏移量“0”开始的长度为 0 字节的传入消息部分。

2012-12-17 19:27:31.088066 4380 UserTrace BIP6061I:代表节点“.InputNode”创建解析器类型“MQMD”以处理从偏移量“0”开始的长度为“364”字节的传入消息部分'。根据来自先前解析器的值“MQHMD”选择的解析器类型。

2012-12-17 19:27:31.088092 4380 UserTrace BIP6069W:代理无法处理数据类型“”“”的消息。 消息代理收到一条需要处理“'”' 类型数据的消息,但该代理没有能力处理这种类型的数据。 检查发送到消息代理的消息和节点的配置数据。如果消息要由代理处理,则必须删除对不受支持的数据类型的引用。

2012-12-17 19:27:31.088113 4380 UserTrace BIP6061I:解析器类型 ''XMLS'' 代表节点“.InputNode”创建以处理部分从偏移量“364”开始的长度为“236”字节的传入消息。根据前一个解析器的值 ''XMLS'' 选择的解析器类型。

【问题讨论】:

  • 只有在 Backout 计数超过 Backout Threshold 后,才会将消息放入 Backout 队列。您可能需要交叉检查消息的 Bacout 计数。

标签: ibm-mq messagebroker backout


【解决方案1】:

BACKOUT 计数确定流应重试处理消息的次数。这里阈值设置为 10,这意味着流尝试处理 10 次,如果仍然失败,MQInput 节点会将消息放入回退队列或 DLQ,如果没有配置回退队列。 Flow 只会将一条消息放入回退队列,而不是您期望的 10 条消息

如果消息以非事务模式处理,则流程不会将消息放入回退队列。检查您是否在 MQInput 节点中将 Transactional 属性配置为“NO”。如果配置的值是“自动”,那么消息应该是持久的,以便在事务下对其进行处理。但跟踪 sn-p 显示消息已放入 SYSTEM.DEAD.LETTER.QUEUE。您可能需要检查消息是否在 DLQ 中,并确认在输入节点中正确配置了回退队列属性。

继续阅读 http://publib.boulder.ibm.com/infocenter/wmbhelp/v7r0m0/topic/com.ibm.etools.mft.doc/ac00414_.htm 这将解决您的所有疑问。

【讨论】:

  • 非常感谢。真正的问题非常简单——我为输出队列创建了 Backout 队列,而不是为 Input 队列。
猜你喜欢
  • 1970-01-01
  • 2015-09-23
  • 2022-09-29
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 2013-10-14
相关资源
最近更新 更多