如何仅在超时场景下重试HTTP请求并流转至流程错误处理器?
仅针对超时错误重试HTTP请求的正确实现方案
核心思路
不要在until-successful内部用try+on-error continue吞掉非超时错误,而是仅捕获超时错误触发重试,其他所有错误直接向上抛出,交给流程级的错误处理器处理。
具体实现步骤
配置
until-successful内部的HTTP请求错误处理
给HTTP请求添加错误处理器,只对超时错误做传播(触发until-successful重试),其他错误直接抛出到流程层面:<until-successful maxRetries="3" secondsBetweenRetries="2" doc:name="Retry On Timeout"> <http:request method="GET" url="#[vars.targetApiUrl]" doc:name="HTTP Request"> <http:error-handler> <!-- 超时错误传播,触发until-successful重试 --> <on-error-propagate type="HTTP:TIMEOUT" doc:name="Propagate Timeout"> </on-error-propagate> <!-- 其他所有错误直接抛出,交给流程级handler处理 --> <on-error-propagate type="ANY" doc:name="Propagate Non-Timeout Errors"> </on-error-propagate> </http:error-handler> </http:request> </until-successful>流程级错误处理器配置
在流程根节点配置对应的错误处理器,接收并处理非超时的HTTP错误:<flow name="mainBusinessFlow"> <error-handler> <!-- 处理500内部服务器错误 --> <on-error-continue type="HTTP:INTERNALSERVERERROR" doc:name="Handle 500 Error"> <logger level="ERROR" message="捕获到500错误:#[error.description]" /> <!-- 这里添加你的错误处理逻辑,比如返回特定响应、记录告警等 --> </on-error-continue> <!-- 可根据需求添加其他HTTP错误类型的处理 --> <on-error-continue type="HTTP:BADREQUEST" doc:name="Handle 400 Error"> <logger level="ERROR" message="捕获到400错误:#[error.description]" /> </on-error-continue> </error-handler> <!-- 流程其他逻辑 --> <until-successful ...> <!-- 上述HTTP请求配置 --> </until-successful> </flow>
原方案问题分析
你之前用try嵌套on-error continue处理非超时错误,相当于在until-successful内部就把错误吞掉了,没有向上传播给流程级的错误处理器,自然无法触发流程层面的错误处理逻辑。
内容的提问来源于stack exchange,提问作者S4L4H
相关产品推荐
相关产品推荐

