假设我定义了这个目标:
<TargetEndpoint name="default">
<PreFlow name="PreFlow">
<Request/>
<Response/>
</PreFlow>
<HTTPTargetConnection>
<URL>http://host1.example.com:39282</URL>
</HTTPTargetConnection>
<PostFlow name="PostFlow">
<Request/>
<Response/>
</PostFlow>
<FaultRules>
....
</FaultRules>
</TargetEndpoint>
如何捕获&#34;连接被拒绝&#34;等目标错误,当目标未在给定端口上侦听时发生,或者#34;主机无法访问&#34;,如果没有到达给定主机的路由,或者DNS名称是否无法解析?
基本上我想要如何指定将放置在上面FaultRule
元素内的FaultRules
的方法。
<FaultRules>
<FaultRule name="catch1">
<Condition>WHAT GOES HERE???</Condition> <!--- ??? --->
<Step>
<Name>AssignMessage-1</Name>
</Step>
</FaultRule>
<FaultRule name="catch2">
<Step>
<Name>AssignMessage-2</Name>
</Step>
</FaultRule>
</FaultRules>
答案 0 :(得分:1)
您可以使用fault.name变量来检查错误(http://apigee.com/docs/api-services/content/policy-attachment-and-enforcement#policy-based-fault-handling)
例如:
<TargetEndpoint name="default">
<FaultRules>
<FaultRule name="bad_network">
<Condition>(fault.name = "ServiceUnavailable")</Condition>
...
我将'ServiceUnavailable'作为故障名称的方式是首先使用无条件的FaultRule策略,然后尝试一些“坏目标”方案 - 正确的地址/错误的端口和错误的地址/名称都生成相同的故障名称,可以使用上面的代码段捕获。
要查看错误名称,您只需要在AssignMessage策略中添加一个块来读取fault.name变量,在跟踪中它将显示在“Variables Got”会话中,或者将其分配给有效负载你的回应。
一旦捕获了您想要处理的所有错误,您就可以返回并修改代理故障会话。
最后一点,上面的FaultRule会话必须在目标端点,才能捕获目标端的网络错误。
干杯,
里卡多