2013-10-30 47 views
6

我們有一個流程,我們已經實現了一個肥皂客戶端向服務提供者發送肥皂消息。超時錯誤直到成功

如果失敗,我們需要重試服務呼叫3次。所以我們在內部使用了HTTP Outbound Endpoint,直到成功範圍。

它按預期做了重試,但是在成功的情況下,即使我們得到服務的響應,我們仍然在觀察超時錯誤,如下所示。

[DispatchThread:1] org.apache.cxf.endpoint.ClientImpl:超時等待響應於操作{http://support.cxf.module.mule.org/}調用。

觀察:

我已刪除了,直到成功,直接過的HTTP出站端點,在這種情況下,沒有超時錯誤。

我後來嘗試過,直到成功,並有一個確認表達式來接受響應,仍然是同一時間響應。

failureExpression = 「#[message.inboundProperties [ 'http.status']!= 200]」 ackExpression = 「#[message.correlationId]」

可以在任何一個請建議,如何配置直到成功接受響應並且不拋出超時錯誤。

+0

請添加您的流量配置。 – user1760178

回答

2

ackExpression與「接受響應」無關,它用於在流程已將當前事件傳遞給消息處理器後,生成將用作新消息負載的值。

嘗試在您的出站HTTP端點上設置response-timeout以查看是否有幫助:可能在until-successful範圍的上下文中使用的默認超時值太大並且會造成此問題。

+0

感謝大衛,我們已經嘗試減少超時,它有時會工作,並且拋出錯誤有時,沒有一致的行爲。我們是否有任何標準或計算來設置響應超時? – Kaaviraaj

+0

這不合邏輯,你可以嘗試在HTTP出站端點上添加'keep-alive =「false」'嗎?也可以嘗試在HTTP連接器上添加'keepSendSocketOpen =「false」'。 –

+0

我試過了,還是一樣的迴應。正如我所提到的,我觀察到這個問題,只有當我們的HTTP Outbound端點在Untill-Successful內時,否則它工作正常。但是我們需要直到成功,因爲我們必須重新嘗試連接失敗。 – Kaaviraaj

1

我找到了解決方案。

此前,我只有HttpOutbound端點內的直接成功,我面臨超時問題。

現在我包括肥皂組件也內直到成功範圍它工作正常。

因爲直到成功讓我們只有一個組件內部,我已經包裝肥皂組件和HttpOutbound端點是一個處理器鏈。

<until-successful objectStore-ref="objectStore" 
      maxRetries="3" secondsBetweenRetries="2" deadLetterQueue-ref="xxxx" 
      doc:name="UntilSuccessfulService" >     
      <processor-chain doc:name="Processor Chain"> 
       <cxf:jaxws-client operation="Request1" serviceClass="xxxxxxx" enableMuleSoapHeaders="true" doc:name="SOAP"/> 
       <http:outbound-endpoint exchange-pattern="request-response" method="POST" doc:name="HTTP" host="localhost" path="cService" port="xxxx" connector-ref="HTTP_HTTPS"/>     
      </processor-chain>     
    </until-successful> 

感謝大衛和所有人的迴應。