WSO2 APIM 4.2开源版:如何将HTTP 404设为故障转移触发条件?
解决WSO2 APIM 4.2中404响应触发故障转移的问题
默认行为说明
WSO2 APIM的负载均衡/故障转移端点默认仅将连接超时、服务器宕机、5xx类服务端错误等视为端点故障(对应内部10xxx系列错误码),4xx类客户端错误(包括404)默认不会标记端点为故障,因此不会触发故障转移。
解决方案
方法1:添加404对应的内部错误码到端点故障触发列表
HTTP 404对应的WSO2内部错误码为101404,你可以手动将其添加到端点的错误处理配置中:
- 进入APIM Publisher,打开目标API,进入Endpoints页面,编辑你的负载均衡/故障转移端点。
- 找到Error Handling模块,在Error Codes输入框中手动添加
101404,同时勾选Mark as Fault选项。 - 调整Failover After参数(建议设为1),确保单次404错误就触发故障转移。
- 保存配置并重新发布API。
方法2:自定义故障序列强制触发故障转移
如果方法1未生效,可通过自定义Fault Sequence捕获404并强制触发故障转移:
- 进入APIM管理控制台的Sequences页面,创建一个自定义序列,内容如下:
<sequence name="Custom404FaultSequence" xmlns="http://ws.apache.org/ns/synapse"> <property name="HTTP_SC" expression="get-property('axis2', 'HTTP_SC')"/> <filter source="$ctx:HTTP_SC" regex="404"> <then> <!-- 标记当前端点为故障,强制切换到备用端点 --> <property name="FORCE_ERROR_ON_SAME_ENDPOINT" value="true" scope="axis2"/> <property name="RETRY_ON_SAME_ENDPOINT" value="false" scope="axis2"/> <send/> </then> <else> <!-- 处理其他错误场景 --> <send/> </else> </filter> </sequence>
- 回到API的端点配置页面,将上述自定义序列设置为该端点的Fault Sequence。
- 保存并重新发布API。
注意事项
- 确保你的端点类型为Load Balance Endpoint或Failover Endpoint,且已正确配置备用服务器节点。
- 若之前尝试勾选所有错误码未生效,大概率是因为默认选项中未包含
101404,需手动输入添加该代码。
内容的提问来源于stack exchange,提问作者StackedOverflow
相关产品推荐
相关产品推荐

