2012-06-26 164 views
1

我們有一個代理服務,它執行以下操作 1.調用後端服務以獲取客戶端ID 2.使用爲該客戶端ID配置的端點(客戶端端點)並將原始請求轉發給該終點。 3.返回對請求的響應wso2 esb中的故障轉移配置

之前我們在將請求轉發到客戶端端點(步驟2)時將OUT_ONLY屬性設置爲true。 但是,我們現在必須爲客戶端端點使用故障轉移端點配置。所以我們刪除了OUT_ONLY屬性並使用了 下面的故障轉移配置。客戶端端點不會爲轉發的請求返回任何響應。 由於這個原因,獲得註冊的回調沒有得到任何響應,隨後被Timeouthandler清除。 最近我們正面臨ESB拋出的一些CPU尖峯和OutOfMemory錯誤。 我們懷疑突觸回調處理程序正在利用大部分系統資源,無法恢復。 此配置是否可以創建任何OutOfMemory錯誤(如果測試過壓力),因爲客戶端端點沒有返回響應? 請建議。

<endpoint xmlns="http://ws.apache.org/ns/synapse" name="client_forward_endpoint_110"> 
<failover> 
    <endpoint name="primary"> 
     <address uri="--primary endpoint--"> 
      <enableAddressing /> 
      <timeout> 
       <duration>30</duration> 
       <action>discard</action> 
      </timeout> 
      <markForSuspension> 
       <errorCodes>101504, 101505, 101500</errorCodes> 
       <retriesBeforeSuspension>3</retriesBeforeSuspension> 
       <retryDelay>1</retryDelay> 
      </markForSuspension> 
      <suspendOnFailure> 
       <initialDuration>1000</initialDuration> 
       <progressionFactor>2</progressionFactor> 
       <maximumDuration>64000</maximumDuration> 
      </suspendOnFailure> 
     </address> 
    </endpoint> 
    <endpoint name="secondary"> 
     <address uri="--secondary endpoint--"> 
      <enableAddressing /> 
      <timeout> 
       <duration>30</duration> 
       <action>discard</action> 
      </timeout> 
      <markForSuspension> 
       <errorCodes>101504, 101505, 101500</errorCodes> 
       <retriesBeforeSuspension>3</retriesBeforeSuspension> 
       <retryDelay>1</retryDelay> 
      </markForSuspension> 
      <suspendOnFailure> 
       <initialDuration>1000</initialDuration> 
       <progressionFactor>2</progressionFactor> 
       <maximumDuration>64000</maximumDuration> 
      </suspendOnFailure> 
     </address> 
    </endpoint> 
</failover> 

回答

0

如果端點不返回任何響應,你怎麼知道它是活躍?

如果端點對任何類型的請求有任何響應,您可以使用第一個「調用」中介來檢查端點可用性,然後使用OUT_ONLY屬性發送中介。您可以使用交換器介體來評估「調用」介體的結果,併爲介體設置一個非常短的超時,以使吞吐量可以接受,即使第一個端點不可訪問也是如此。這不是一個理想的解決方案,但它應該工作。