0

我有一个 spring 集成管道,并且我有许多不同的服务激活器,我想为其启用重试。

我想使用相同的重试策略(即重试次数、退避策略等)。我可以只有一个实现重试策略的 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>

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

4

2 回答 2

0

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

使用 AOP 重试

这就像一个魅力。

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

于 2014-07-30T07:08:38.227 回答
0

你走对了:它RequestHandlerRetryAdvice是线程安全的,所以你可以在多个地方使用同一个 bean。

于 2014-05-31T15:03:02.613 回答