Mule 4 sftp 读取文件 - 使用直到成功的重试机制,无法捕获异常
Mule 4 sftp read file - retry mechanism using Until successful , unable to catch exception
这个问题是之前一个问题的后续问题
所以:
我正在尝试从 SFTP 位置读取文件。我正在使用 Mule 4.4 社区版。如果连接到 SFTP 服务器时出现任何错误或文件不存在,请让 mule 重试 2 次。
根据@aled 的回答,我现在正在使用 'until successful'
代码如下:
<sftp:config name="SFTP_Config" doc:name="SFTP Config">
<sftp:connection host="abcd" username="xyz" password="pwd" />
</sftp:config>
<flow name="get:employee">
<logger level="INFO" doc:name="Logger" message="starting search" category="get-employee"/>
<until-successful maxRetries="1" doc:name="Until Successful" millisBetweenRetries="30000">
<sftp:read doc:name="Read" config-ref="SFTP_Config" path="/a/employees.unl">
<repeatable-in-memory-stream />
<reconnect />
</sftp:read>
</until-successful>
<error-handler ></error-handler>
</flow>
现在代码每隔 30 秒重试从 sftp 读取文件 1 次。
一切都好到这里
让我感到困惑的是错误处理。
在我的例子中,我在没有文件存在于 sftp 中的情况下进行测试,所以我得到了错误:
SFTP:ILLEGAL_PATH
但是在最大重试后错误类型是:
SFTP:RETRY_EXHAUSTED
IN 错误处理程序,当我给出要捕获的错误类型时:SFTP:RETRY_EXHAUSTED
它没有被抓住!
<on-error-continue enableNotifications="false" logException="false" doc:name="On Error Continue" type="SFTP:RETRY_EXHAUSTED">
</on-error-continue>
当我给 catch 块捕获两种错误类型时:
SFTP:RETRY_EXHAUSTED 和 SFTP:ILLEGAL_PATH
<on-error-continue enableNotifications="false" logException="false" doc:name="On Error Continue" type=" SFTP:RETRY_EXHAUSTED,SFTP:ILLEGAL_PATH">
</on-error-continue>
捕获到异常,但在日志中有警告:
Expected error type from flow 'get:employee/errorHandler/2' has
matched the following underlying error: ILLEGAL_PATH. Consider
changing it to match the reported error: RETRY_EXHAUSTED.
我无法理解这种行为,错误处理的最佳方式是什么?
不是 SFTP:RETRY_EXHAUSTED
,而是 MULE:RETRY_EXHAUSTED
。尝试在错误处理程序中捕获 MULE:RETRY_EXHAUSTED
或简单地 RETRY_EXHAUSTED
。
您可以参考 until-success 文档了解更多详情。
RETRY_EXHAUSTED
错误仅包含 最新错误 失败的 until-success
范围,在大多数情况下,这是您想要的知道。您可以使用 error.suppressedErrors[0]
.
得到这个错误
例如:
如果你想根据最新的错误以不同的方式处理错误,你可以在错误处理程序的 when 表达式中添加一个条件。像 error.suppressedErrors[0].errorType == SOME_ERROR_TYPE
这个问题是之前一个问题的后续问题
所以: 我正在尝试从 SFTP 位置读取文件。我正在使用 Mule 4.4 社区版。如果连接到 SFTP 服务器时出现任何错误或文件不存在,请让 mule 重试 2 次。
根据@aled 的回答,我现在正在使用 'until successful'
代码如下:
<sftp:config name="SFTP_Config" doc:name="SFTP Config">
<sftp:connection host="abcd" username="xyz" password="pwd" />
</sftp:config>
<flow name="get:employee">
<logger level="INFO" doc:name="Logger" message="starting search" category="get-employee"/>
<until-successful maxRetries="1" doc:name="Until Successful" millisBetweenRetries="30000">
<sftp:read doc:name="Read" config-ref="SFTP_Config" path="/a/employees.unl">
<repeatable-in-memory-stream />
<reconnect />
</sftp:read>
</until-successful>
<error-handler ></error-handler>
</flow>
现在代码每隔 30 秒重试从 sftp 读取文件 1 次。 一切都好到这里
让我感到困惑的是错误处理。 在我的例子中,我在没有文件存在于 sftp 中的情况下进行测试,所以我得到了错误:
SFTP:ILLEGAL_PATH
但是在最大重试后错误类型是:
SFTP:RETRY_EXHAUSTED
IN 错误处理程序,当我给出要捕获的错误类型时:SFTP:RETRY_EXHAUSTED 它没有被抓住!
<on-error-continue enableNotifications="false" logException="false" doc:name="On Error Continue" type="SFTP:RETRY_EXHAUSTED">
</on-error-continue>
当我给 catch 块捕获两种错误类型时: SFTP:RETRY_EXHAUSTED 和 SFTP:ILLEGAL_PATH
<on-error-continue enableNotifications="false" logException="false" doc:name="On Error Continue" type=" SFTP:RETRY_EXHAUSTED,SFTP:ILLEGAL_PATH">
</on-error-continue>
捕获到异常,但在日志中有警告:
Expected error type from flow 'get:employee/errorHandler/2' has matched the following underlying error: ILLEGAL_PATH. Consider changing it to match the reported error: RETRY_EXHAUSTED.
我无法理解这种行为,错误处理的最佳方式是什么?
不是 SFTP:RETRY_EXHAUSTED
,而是 MULE:RETRY_EXHAUSTED
。尝试在错误处理程序中捕获 MULE:RETRY_EXHAUSTED
或简单地 RETRY_EXHAUSTED
。
您可以参考 until-success 文档了解更多详情。
RETRY_EXHAUSTED
错误仅包含 最新错误 失败的 until-success
范围,在大多数情况下,这是您想要的知道。您可以使用 error.suppressedErrors[0]
.
例如:
如果你想根据最新的错误以不同的方式处理错误,你可以在错误处理程序的 when 表达式中添加一个条件。像 error.suppressedErrors[0].errorType == SOME_ERROR_TYPE