Spring Integration&重试:我是否需要为每个服务激活器单独的重试bean?

时间:2014-01-27 23:00:22

标签: spring-integration spring-retry

我有一个弹簧集成管道,我有许多不同的服务激活器,我想启用重试。

我想使用相同的重试策略(即重试次数,退避策略等)。我可以只使用一个实现重试策略的bean并将其用于几个不同的服务激活器,还是每个服务激活器都需要自己的重试bean?换句话说,我可以只创建一个bean“retryWithBackupAdviceSession”并为几个服务激活器设置request-hadler-advice-chain吗?或者每个人都需要自己的吗?

以下是我正在使用的重试策略示例。

<bean id="retryWithBackoffAdviceSession" class="org.springframework.integration.handler.advice.RequestHandlerRetryAdvice">
            <property name="retryTemplate">
                <bean class="org.springframework.retry.support.RetryTemplate">
                    <property name="backOffPolicy">
                        <bean class="org.springframework.retry.backoff.ExponentialBackOffPolicy">
                            <property name="initialInterval" value="2000" />    <!-- 2 seconds -->
                            <property name="multiplier" value="2" />            <!-- double the wait each time -->
                            <property name="maxInterval" value="30000"/>        <!-- maximum of 30 seconds -->
                        </bean>
                    </property>
                    <property name="retryPolicy">
                        <bean class="org.springframework.retry.policy.SimpleRetryPolicy">
                            <property name="maxAttempts" value="3"/>
                        </bean>
                    </property>
                </bean>
            </property>
            <property name="recoveryCallback">
                <bean class="org.springframework.integration.handler.advice.ErrorMessageSendingRecoverer">
                    <constructor-arg ref="myErrorChannel"/>
                </bean>
            </property>
        </bean>

作为一个后续问题,如果我的服务激活器在执行程序通道中运行,它是否以某种方式跟踪每个线程的重试次数?或者我需要做些什么来确保在同一个线程安全的服务激活器上重试不同消息的不同线程之间不存在串扰?

2 个答案:

答案 0 :(得分:0)

你走的正确:RequestHandlerRetryAdvice是线程安全的,所以你可以从几个地方使用相同的beand。

答案 1 :(得分:0)

我必须在我的项目中实现重试机制,并且我创建了自己的实现。

Retry using AOP

这就像一个魅力。

您可以使用@Retry注释来注释您的方法,提供您想要的一些配置及其完成。