在Apigee中,如何捕获连接到目标服务器的故障?

时间:2014-05-16 00:09:12

标签: apigee

假设我定义了这个目标:

<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>

1 个答案:

答案 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会话必须在目标端点,才能捕获目标端的网络错误。

干杯,

里卡多