簡體   English   中英

配置錯誤處理並為Http.outboundGateway spring dsl重試

[英]Configure error handling and retry for Http.outboundGateway spring dsl

我有一個要求,當它失敗時我需要打個電話,我必須重試3次,並且根據收到的狀態代碼,我需要執行不同的操作,我找不到合適的spring Integration dsl示例。 如何配置錯誤處理程序並重試

@Bean
public IntegrationFlow performCreate() {
    return IntegrationFlows.from("createFlow")
            .handle(Http.outboundGateway("http://localhost:8080/create")
                    .httpMethod(HttpMethod.GET)
                    .expectedResponseType(String.class)
                    .requestFactory(simpleClientHttpRequestFactory())
                    .errorHandler(??)
            )

            .log(LoggingHandler.Level.DEBUG, "response", m -> m.getPayload())
            .log(LoggingHandler.Level.DEBUG, "response", m -> m.getHeaders())
            .get();
}

private SimpleClientHttpRequestFactory simpleClientHttpRequestFactory() {
    SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
    simpleClientHttpRequestFactory.setReadTimeout(5000);
    simpleClientHttpRequestFactory.setConnectTimeout(5000);
    return simpleClientHttpRequestFactory;
}

Java DSL .handle()具有第二個參數.handle() Consumer<GenericEndpointSpec<?>> ,可以使用以下參數進行配置:

/**
 * Configure a list of {@link Advice} objects to be applied, in nested order, to the
 * endpoint's handler. The advice objects are applied only to the handler.
 * @param advice the advice chain.
 * @return the endpoint spec.
 */
public S advice(Advice... advice) {

這些建議之一是在Spring Integration框中RequestHandlerRetryAdvicehttps : RequestHandlerRetryAdvice

https://docs.spring.io/spring-integration/docs/5.0.4.RELEASE/reference/html/java-dsl.html#java-dsl-endpoints

.handle(Http.outboundGateway("http://localhost:8080/create")
                .httpMethod(HttpMethod.GET)
                .expectedResponseType(String.class)
                .requestFactory(simpleClientHttpRequestFactory()),
           e -> e.advice(retryAdvice())

...

@Bean
public RequestHandlerRetryAdvice retryAdvice() {
    RequestHandlerRetryAdvice requestHandlerRetryAdvice = new RequestHandlerRetryAdvice();
    requestHandlerRetryAdvice.setRecoveryCallback(errorMessageSendingRecoverer());
    return requestHandlerRetryAdvice;
}

@Bean
public ErrorMessageSendingRecoverer errorMessageSendingRecoverer() {
    return new ErrorMessageSendingRecoverer(recoveryChannel())
}

@Bean
public MessageChannel recoveryChannel() {
    return new DirectChannel();
}

@Bean
public IntegrationFlow handleRecovery() { 
     return IntegrationFlows.from("recoveryChannel")
                   .log(LoggingHandler.Level.ERROR, "error", 
                        m -> m.getPayload())
                   .get(); 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM