【问题标题】:In Apigee, how do I catch faults connecting to the target server?在 Apigee 中,如何捕获连接到目标服务器的故障?
【发布时间】:2014-05-16 23:42:24
【问题描述】:

假设我定义了这个目标:

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

如何捕获目标错误,例如“连接被拒绝”,当目标未在给定端口上侦听时会发生,或“主机无法到达”,如果没有到给定主机的路由或如果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>

【问题讨论】:

    标签: apigee


    【解决方案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 策略,然后尝试一些“错误目标”场景 - 正确的地址/错误的端口和错误的地址/名称都生成相同的故障名称,可以使用上面的 sn-p 捕获。

    要查看错误名称,您只需在 AssignMessage 策略中添加一个块来读取 fault.name 变量,并在跟踪中将其显示在“Variables Got”会话中,或将其分配给有效负载您的回复。

    一旦你捕获了你想要处理的所有故障,你就可以返回并修改代理故障规则会话。

    最后一点,上面的 FaultRule 会话必须在目标端点中才能捕获目标端的网络错误。

    干杯,

    里卡多

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 1970-01-01
      • 2020-09-29
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      相关资源
      最近更新 更多