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