2014-12-15 2 views
2

서비스를 중단하기 위해 json 메시지를 게시하는 http 아웃 바운드 게이트웨이가 있습니다. 나머지는 응용 프로그램에서 캡처해야하는 오류가있는 경우 json 메시지 유형의 http 오류 상태로 응답합니다. 해피 시나리오에서 해당 휴식 서비스에 json 메시지를 게시하고 http 성공 상태를 얻었으며 json 메시지도 애플리케이션과 함께 캡처해야합니다.스프링 통합 HTTP 아웃 바운드 게이트웨이 타임 아웃 처리

이제 스프링 통합을 통해 나는 메시지를 보내고 성공 응답을 얻었지만 그것을 캡처 할 수 있었지만 오류 상태에서는 스프링 동작이 예외를 throw하여 어떻게 동작을 변경할 수 있습니까?

시간 제한이있는 경우 어떻게 다시 시도 할 수 있습니까? 단지 시간 제한이있는 경우 위의 구성은 내가 그에 다시 시도하지 않을 오류 메시지에 다시 시도 할 HTTP 아웃 바운드 게이트웨이 구성

<int-http:outbound-gateway request-channel="aggregatorChannel" reply-channel="responseChannel" charset="UTF-8" 
    url="http://localhost:8090/receiveGateway" http-method="POST" reply-timeout="180000">    
    <int-http:request-handler-advice-chain > 
     <int:retry-advice max-attempts="5" recovery-channel="aggregatorChannel" > 
      <int:exponential-back-off initial="1000" multiplier="5.0" maximum="600000" /> 
     </int:retry-advice> 
    </int-http:request-handler-advice-chain> 
</int-http:outbound-gateway> 

아래

, 나는 다시 시도합니다.

답변

3

동작을 (오류가있는 경우) 무엇으로 변경 하시겠습니까?

재시도 인터셉터의 RetryTemplate을 수동으로 <bean/>으로 연결하면 RetryPolicy에 재시도 가능한 예외를 지정할 수 있습니다.

편집이 :

그것은 당신이하려고하는,하지만 어쩌면이 옳은 방향으로 당신을 가리 킵니다 ...

<int-http:outbound-gateway request-channel="requestChannel" 
          url="http://localhost:8080/http/receiveGateway" 
          http-method="POST" 
          request-factory="requestFactory" 
          expected-response-type="java.lang.String"> 
    <int-http:request-handler-advice-chain > 
     <int:retry-advice max-attempts="5" recovery-channel="foo"> 
      <int:exponential-back-off initial="1000" multiplier="1.1" maximum="600000" /> 
     </int:retry-advice> 
     <bean class="foo.MyExceptionAdvice" /> 
    </int-http:request-handler-advice-chain> 
</int-http:outbound-gateway> 

<bean id="requestFactory" class="org.springframework.http.client.SimpleClientHttpRequestFactory"> 
    <property name="connectTimeout" value="5000"/> 
    <property name="readTimeout" value="5000"/> 
</bean> 

것을 완전히 명확한 정의 예외 조언이를 throw하지 않다면 예외가 발생하면 메시지가 재 시도되어 결국 복구 채널로 전송됩니다. 사용자 정의 조언이 오류를 사용하면 리턴 값을 보낼 수 있습니다. this gist에 심플하게 두었습니다.

+0

좋다! 하지만 타임 아웃 연결시 다시 시도 할 수있는 방법은 무엇입니까? 첫 눈에 띄는 점은 쉽게 알 수 있지만 미스터리를 맞추는 방법은 위의 구성에서 어떻게 설명 할 수 있습니까? –

+0

타임 아웃시이를 구현할 수없는 것 같습니다. –

+0

방법은 'SimpleRetryPolicy'에 대한 [javadocs] (http://docs.spring.io/spring-retry/docs/1.1.2.RELEASE/apidocs/org/springframework/retry/policy/SimpleRetryPolicy.html)를 참조하십시오. 재시도를 적용 할 예외를 구성합니다. –

관련 문제