Spring integration HttpRequestExecutingMessageHandler不工作的RequestHandlerRetryAdvice

Spring integration HttpRequestExecutingMessageHandler不工作的RequestHandlerRetryAdvice,spring-integration,spring-retry,Spring Integration,Spring Retry,我有下面的配置文件 @Configuration @PropertySource({ "application.properties" }) @EnableIntegration @IntegrationComponentScan @EnableRetry public class IntegrationBeanConfiguration { @Bean public SimpleRetryPolicy retryPolicy(){ SimpleRetryPol

我有下面的配置文件

@Configuration
@PropertySource({ "application.properties" })
@EnableIntegration
@IntegrationComponentScan
@EnableRetry
public class IntegrationBeanConfiguration {

    @Bean
    public SimpleRetryPolicy retryPolicy(){
        SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
        retryPolicy.setMaxAttempts(5);
        return retryPolicy;
    }

    @Bean
    public FixedBackOffPolicy fixedBackOffPolicy(){
        FixedBackOffPolicy p = new FixedBackOffPolicy();
        p.setBackOffPeriod(1000);
        return p;
    }

    @Bean
    public RequestHandlerRetryAdvice retryAdvice(SimpleRetryPolicy retryPolicy, FixedBackOffPolicy fixedBackOffPolicy){
        RequestHandlerRetryAdvice retryAdvice = new RequestHandlerRetryAdvice();
        RetryTemplate retryTemplate = new RetryTemplate();
        retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
        retryAdvice.setRetryTemplate(retryTemplate);
        return retryAdvice;
    }

    @Bean
    @ServiceActivator(inputChannel="rtpRequestPostOperationRequestChannel")
    public MessageHandler httResponseMessageHandler(MessageChannel rtpRequestPostOperationResponseChannel, HeaderMapper<HttpHeaders> headerMapper, RequestHandlerRetryAdvice retryAdvice) {
        List<Advice> list = new ArrayList<>();
        list.add(retryAdvice);
        HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler("https://myhost:8080/rtp/request");
        handler.setHttpMethod(HttpMethod.POST);
        handler.setHeaderMapper(headerMapper);
        handler.setOutputChannel(rtpRequestPostOperationResponseChannel);
        handler.setExpectedResponseType(RtpResponse.class);
        handler.setAdviceChain(list);
        return handler;
    }

}
@配置
@PropertySource({“application.properties”})
@使能集成
@集成组件扫描
@启用重试
公共类集成Bean配置{
@豆子
公共简单政策retryPolicy(){
SimpleRetryPolicy retryPolicy=新的SimpleRetryPolicy();
retryPolicy.setMaxAttempts(5);
退货政策;
}
@豆子
public FixedBackOffPolicy FixedBackOffPolicy(){
FixedBackOffPolicy p=新的FixedBackOffPolicy();
p、 退避期(1000);
返回p;
}
@豆子
public RequestHandlerRetryAdvice retryAdvice(SimpleRetryPolicy retryPolicy、FixedBackOffPolicy FixedBackOffPolicy){
RequestHandlerRetryAdvice retryAdvice=新建RequestHandlerRetryAdvice();
RetryTemplate RetryTemplate=新RetryTemplate();
retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
setRetryTemplate(retryTemplate);
回复回复建议;
}
@豆子
@ServiceActivator(inputChannel=“rtpRequestPostOperationRequestChannel”)
public MessageHandler httResponseMessageHandler(MessageChannel rtpRequestPostOperationResponseChannel、HeaderMapper HeaderMapper、RequestHandlerRetryAdvice retryAdvice){
列表

但是没有重试。如果我的理解不正确或配置中有错误,请告知


感谢Gary评论中的帮助。以下配置有效

@Configuration
@PropertySource({ "application.properties" })
@EnableIntegration
@IntegrationComponentScan
@EnableRetry
public class IntegrationBeanConfiguration {

    @Bean
    public SimpleRetryPolicy retryPolicy(){
        SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
        retryPolicy.setMaxAttempts(5);
        return retryPolicy;
    }

    @Bean
    public FixedBackOffPolicy fixedBackOffPolicy(){
        FixedBackOffPolicy p = new FixedBackOffPolicy();
        p.setBackOffPeriod(1000);
        return p;
    }

    @Bean
    public RequestHandlerRetryAdvice retryAdvice(SimpleRetryPolicy retryPolicy, FixedBackOffPolicy fixedBackOffPolicy){
        RequestHandlerRetryAdvice retryAdvice = new RequestHandlerRetryAdvice();
        RetryTemplate retryTemplate = new RetryTemplate();
        retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
        retryTemplate.setRetryPolicy(retryPolicy)
        retryAdvice.setRetryTemplate(retryTemplate);
        return retryAdvice;
    }

    @Bean
    @ServiceActivator(inputChannel="rtpRequestPostOperationRequestChannel")
    public MessageHandler httResponseMessageHandler(MessageChannel rtpRequestPostOperationResponseChannel, HeaderMapper<HttpHeaders> headerMapper, RequestHandlerRetryAdvice retryAdvice) {
        List<Advice> list = new ArrayList<>();
        list.add(retryAdvice);
        HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler("https://myhost:8080/rtp/request");
        handler.setHttpMethod(HttpMethod.POST);
        handler.setHeaderMapper(headerMapper);
        handler.setOutputChannel(rtpRequestPostOperationResponseChannel);
        handler.setExpectedResponseType(RtpResponse.class);
        handler.setAdviceChain(list);
        return handler;
    }

}
@配置
@PropertySource({“application.properties”})
@使能集成
@集成组件扫描
@启用重试
公共类集成Bean配置{
@豆子
公共简单政策retryPolicy(){
SimpleRetryPolicy retryPolicy=新的SimpleRetryPolicy();
retryPolicy.setMaxAttempts(5);
退货政策;
}
@豆子
public FixedBackOffPolicy FixedBackOffPolicy(){
FixedBackOffPolicy p=新的FixedBackOffPolicy();
p、 退避期(1000);
返回p;
}
@豆子
public RequestHandlerRetryAdvice retryAdvice(SimpleRetryPolicy retryPolicy、FixedBackOffPolicy FixedBackOffPolicy){
RequestHandlerRetryAdvice retryAdvice=新建RequestHandlerRetryAdvice();
RetryTemplate RetryTemplate=新RetryTemplate();
retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
retryTemplate.setRetryPolicy(retryPolicy)
setRetryTemplate(retryTemplate);
回复回复建议;
}
@豆子
@ServiceActivator(inputChannel=“rtpRequestPostOperationRequestChannel”)
public MessageHandler httResponseMessageHandler(MessageChannel rtpRequestPostOperationResponseChannel、HeaderMapper HeaderMapper、RequestHandlerRetryAdvice retryAdvice){
列表=新的ArrayList();
列表。添加(retryAdvice);
HttpRequestExecutingMessageHandler=新的HttpRequestExecutingMessageHandler(“https://myhost:8080/rtp/request");
handler.setHttpMethod(HttpMethod.POST);
handler.setHeaderMapper(headerMapper);
setOutputChannel(rtpRequestPostOperationResponseChannel);
setExpectedResponseType(RtpResponse.class);
handler.setAdviceChain(列表);
返回处理程序;
}
}

您没有将
retryPolicy
注入模板;但这只意味着它将使用默认的3次尝试。您所说的“不发生”是什么意思?重试通常是无声的。我建议您打开调试日志以查看重试行为。谢谢Gary。现在我可以看到正在进行的重试。