2013-10-30 28 views
6

Chúng tôi có một luồng nơi chúng tôi đã triển khai trình khách xà phòng để gửi thông điệp xà phòng tới nhà cung cấp dịch vụ.Lỗi hết thời gian chờ cho đến khi thành công

Chúng tôi cần thử lại cuộc gọi dịch vụ 3 lần nếu không thành công. Vì vậy, chúng tôi đã sử dụng HTTP Endbound Endpoint bên trong cho đến khi phạm vi thành công.

Nó đang thực hiện thử lại như mong đợi, nhưng trong trường hợp kịch bản thành công, ngay cả khi chúng tôi nhận được phản hồi từ dịch vụ, chúng tôi đang quan sát lỗi hết thời gian như sau.

[DispatchThread: 1] org.apache.cxf.endpoint.ClientImpl: Đã hết thời gian chờ phản hồi hoạt động {http://support.cxf.module.mule.org/} gọi.

Observation:

Tôi đã gỡ bỏ cho đến khi thành công và có điểm cuối HTTP Outbound trực tiếp, trong trường hợp này không có lỗi timeout.

Tôi sau đó đã cố gắng cho đến khi thành công và có biểu thức xác nhận để chấp nhận phản hồi, vẫn phản hồi tương tự.

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

thể bất kỳ một đề nghị xin vui lòng, làm thế nào để cấu hình cho đến khi thành công để chấp nhận phản hồi và không ném ra lỗi thời gian.

+0

Vui lòng thêm cấu hình luồng của bạn. – user1760178

Trả lời

2

ackExpression không có gì liên quan đến "chấp nhận phản hồi", để tạo giá trị sẽ được sử dụng làm trọng tải thư mới sau khi luồng đã chuyển sự kiện hiện tại tới bộ xử lý tin nhắn until-successful.

Thử đặt response-timeout trên điểm cuối HTTP gửi đi của bạn để xem liệu nó có giúp ích: có thể thời gian chờ mặc định được sử dụng trong ngữ cảnh của phạm vi until-successful quá lớn và tạo sự cố này.

+0

Cảm ơn David, Chúng tôi đã cố gắng giảm thời gian chờ, đôi khi nó hoạt động và bị lỗi một lần, không có hành vi nhất quán. Chúng ta có bất kỳ tiêu chuẩn hoặc tính toán nào để đặt thời gian chờ phản hồi không? – Kaaviraaj

+0

Điều này không hợp lý, bạn có thể thử thêm 'keep-alive =" false "' vào điểm cuối HTTP outbound không? Ngoài ra, hãy thử thêm 'keepSendSocketOpen =" false "' trên trình kết nối HTTP. –

+0

Tôi đã thử điều này, vẫn là câu trả lời tương tự. Như tôi đã đề cập, tôi đang quan sát vấn đề này, chỉ khi chúng ta có điểm cuối HTTP Outbound bên trong Untill-Successful, nếu không nó hoạt động tốt.Nhưng chúng ta cần cho đến khi thành công vì chúng ta phải thử lại các nỗ lực cho các lỗi kết nối. – Kaaviraaj

1

Tôi đã tìm thấy giải pháp cho việc này.

Trước đó tôi chỉ có HttpOutbound endpoint bên trong Cho đến khi thành công và tôi đang gặp vấn đề Timeout.

Bây giờ tôi đã bao gồm thành phần Xà phòng cũng bên trong phạm vi Cho đến khi thành công, nó hoạt động tốt.

Vì cho đến khi thành công cho phép chúng tôi chỉ có một thành phần bên trong, tôi đã bọc thành phần xà phòng và điểm cuối HttpOutbound là chuỗi bộ xử lý.

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

Cảm ơn David và tất cả những câu trả lời của bạn.

Các vấn đề liên quan