- 在工作台中检查您的消息流。
您可能已经将 MQInput 节点 failure 终端连接到连续的节点而不是 out 终端。out 终端是这三个终端的中间一个。导向到未连接的 out 终端的消息被废弃。
- 如果 MQInput 节点的 out 终端正确连接到连续的节点,则检查代理的本地错误日志是否表明由于这些问题而导致消息处理被中断。
附加的消息给出更详细的信息。
如果 MQInput 节点的 failure 终端已经进行了连接(例如,连接到 MQOutput 节点),则不会出现这些消息。
将节点连接到任何节点的 failure 终端表明您设计的消息流处理所有错误处理。如果您将 failure 终端连接到 MQOutput 节点,则您的消息流会忽略发生的任何错误。
- 如果 MQInput 节点的 out 终端正确连接到连续的节点,并且本地错误日志没有任何错误消息,则为消息流打开用户跟踪。
- 切换到“代理管理”透视图。
- 在“域”视图中,选择消息流,并右键单击。(您可能要单击刷新图标以刷新该视图。)
- 单击。
此操作仅从消息访问的节点产生用户跟踪条目。
在分布式系统上,您可以使用 mqsireadlog 命令检索跟踪条目,使用 mqsiformatlog 命令格式化它们,并查看格式化的记录以检查通过消息流的消息的路径。
对于 z/OS,编辑和提交 COMPONENTPDS 中的 BIPJLOG 作业,以执行 mqsireadlog 和 mqsiformatlog 命令来处理跟踪。
- 如果用户跟踪显示消息没有按您期待的消息流的路径通过,则选择该消息流,右键单击它并单击,将用户跟踪级别增加到“调试”。
将您的消息再次发送到消息流。调试级别跟踪产生有关消息的路由的更多详细信息,然后您可以确定消息流采取的操作的原因。
解决问题后不要忘记关闭跟踪,否则可能会对性能产生不利影响。
- 如果 MQOutput 节点上定义的输出队列的 mqput 命令没有成功(例如,队列已满或者禁止 put),则消息的最终目标取决于以下几个方面:
- MQOutput 节点的 failure 终端是否已连接
- 消息是否正在进行事务性处理(它依次取决于 MQInput 节点、MQOutput 节点以及输入和输出队列的事务模式设置)
- 消息是持久的还是非持久的(仅 transaction mode=automatic)。如果 transaction
mode=yes,则所有消息都被作为持久的,如果 transaction mode=no,则所有消息都被作为非持久的。
一般情况下:
- 如果没有为故障定义路径(即,没有连接 MQInput 节点的 catch 终端或 failure 终端):
- 非事务性消息被废弃。
- 事务性消息回滚到输入队列以进行重试。
- 如果消息的回退计数小于输入队列的回退阈值(BOTHRESH),则重试此消息并重新将它发送到 out 终端。
- 当回退计数等于或超出回退阈值时,如果指定,则消息被放入回退队列(由输入队列的 BOQNAME 属性标识),如果没有定义的回退队列或者到回退队列的 MQPUT 失败,则消息被放入死信队列。如果到死信队列的 MQPUT 失败,或者没有定义死信队列,消息流继续循环以尝试将消息放入死信队列。
- 如果为故障定义了路径(如果连接了 catch 和 failure 终端,则消息通过 catch 终端产生),则该路径定义消息的目标。
- 如果在 MQInput 节点属性上您的消息流使用 transaction mode=yes,且消息没有出现在输出队列上,检查消息流的路径。
如果消息具有没有故障的路径,但是它们在输出队列(或其他持久存储)中没有结束,则消息流没有失败,并且消息不会回退或者放到另一个目标(例如,catch 终端、死信队列或队列的回退队列)。
检查到达最终输出节点和没有到达死端点的所有可能的路径。例如,检查:
- 您将 Filter 节点的 unknown 终端连接到消息流中的另一个节点。
- 您将 Filter 节点的 true 和 false 终端连接到消息流中的另一个节点。