2014-05-16 37 views
0

假設我有這個目標定義:在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> 

如何趕上目標錯誤,如「拒絕連接」,當其目標是不聽給定端口上會發生,或「主機不可達」,這如果沒有到給定主機的路由或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

可以使用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變量,並在跟蹤中顯示「變量已獲得」會話,或將其分配給你的迴應的有效載荷。

一旦捕獲了所有您要處理的故障,您可以返回並修改代理faultrules會話。

最後一個註釋,上面的FaultRule會話必須位於目標端點,以便捕獲目標端的網絡錯誤。

乾杯,

裏卡多