2013-10-30 14 views
6

Hizmet sağlayıcısına sabun iletileri göndermek için bir sabun istemcisi uygulamamız gereken bir akışa sahibiz.Başarılı Bire Kadar Zaman Aşımı hatası

Başarısız olursa 3 kez servis çağrısını tekrar denemeliyiz. Bu yüzden başarılı kapsama kadar içeride HTTP Outbound Endpoint kullandık.

Beklendiği gibi yeniden deniyor, ancak başarı senaryosunda, yanıtı hizmetten alsak bile, aşağıdaki gibi bir zaman aşımı hatası gözlemliyoruz.

[DispatchThread: 1] org.apache.cxf.endpoint.ClientImpl: operasyon {http://support.cxf.module.mule.org/} yanıt için bekleme süresi doldu çağırır.

Gözlem: Ben kadar başarıyla kaldırıldı ve doğrudan HTTP Giden bitiş noktası oldu

, bu durumda hiçbir zaman aşımı hata var. Daha sonra başarılı olana kadar denemeyi denedim ve yanıtı kabul etmek için yine de aynı zaman aşımı yanıtını kabul ettim.

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

herhangi biri önermek misiniz, nasıl yanıtı kabul etmek için başarılı olana kadar ve zaman aşımı hatası vermeden yapılandırın.

+0

Lütfen akış yapılandırmanızı ekleyin. – user1760178

cevap

2

ackExpression'un "yanıtı kabul et" ile hiçbir ilgisi yoktur, akım until-successful ileti işlemcisine akış geçtikten sonra yeni ileti yükü olarak kullanılacak bir değer oluşturmak içindir.

Yararlı olup olmadığını görmek için giden HTTP son noktanıza bir response-timeout ayarlamayı deneyin: belki de until-successful kapsamı bağlamında kullanılan varsayılan zaman aşımı çok büyük ve bu sorunu oluşturur.

+0

Teşekkürler David, Zaman aşımını azaltmaya çalıştık, bazen çalışıyor ve bazı zamanlarda hata atıyor, Tutarsız bir davranış yok. Yanıt zaman aşımını ayarlamak için herhangi bir standart veya hesaplamamız var mı? – Kaaviraaj

+0

Bu mantıksal değil, HTTP giden uç noktasında "keep-alive =" false "ifadesini eklemeye çalışabilir misiniz? Ayrıca HTTP bağlayıcısında 'keepSendSocketOpen =" false "' ı eklemeyi deneyin. –

+0

Bunu denedim, hala aynı cevap. Daha önce de belirttiğim gibi, bu konuyu gözlemliyorum, ancak Yetkili-Başarılı olana kadar giden HTTP uç noktaya sahipsek, aksi takdirde iyi çalışıyor.Ancak bağlantı başarısızlıkları için yeniden denemeler yapmak zorunda olduğumuzdan, başarılı oluncaya kadar başarılı olmamız gerekiyor. – Kaaviraaj

1

Bunun için bir çözüm buldum.

Önceden başarılı olana kadar yalnızca HttpOutbound uç noktası vardı ve Zaman Aşımı sorunuyla karşılaşıyorum.

Şimdi Sabun bileşenini de dahil ettim Başarılı olmayan kapsamda iyi çalışıyor.

Başarılı olana kadar içimizdeki tek bir bileşene sahip olmamıza izin verdiğim için, sabun bileşenini ve HttpOutbound uç noktasını bir işlemci zincirinin içine koydum.

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

Teşekkür David ve yanıtları için tüm.