我们在项目中使用Spring Integration,我们有一个要求,如果IBM MQ出现问题,那么我们将不得不在IBM MQ启动时自动连接到它。我们使用recoveryInterval
类的org.springframework.jms.listener.DefaultMessageListenerContainer
选项完成了此实现。我们已经将恢复间隔设置为6秒,因此每6秒系统尝试恢复MQ连接,但现在我们有一个要求,我们必须只执行两次自动恢复,之后如果MQ仍然关闭则停止入站适配器。
Spring Integration中是否有任何方法可以提及自动恢复重试次数,以便系统只尝试恢复该重试次数?
以下是我现有的配置。
<bean id="inQ" class="com.ibm.mq.jms.MQQueue">
<constructor-arg value="${mq.inbound.queue}" />
</bean>
<int:channel id="inbound" />
<int-jms:message-driven-channel-adapter
id="jmsIn" channel="inbound" container="messageListenerContainer"
acknowledge="transacted" auto-startup="false">
</int-jms:message-driven-channel-adapter>
<int:service-activator id="mainService"
input-channel="inbound" ref="messageListener" method="onMessage">
<int:request-handler-advice-chain>
<ref bean="retryWithBackoffAdviceSession" />
</int:request-handler-advice-chain>
</int:service-activator>
<bean id="messageListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="mqConnectionFactory" />
<property name="destination" ref="inQ" />
<property name="sessionTransacted" value="true" />
<property name="maxConcurrentConsumers" value="${maxConcurrentConsumers}" />
<property name="concurrentConsumers" value="${concurrentConsumers}" />
<property name="receiveTimeout" value="${receiveTimeout}" />
<property name="recoveryInterval" value="60000" />
<property name="autoStartup" value="${autoStartup}" />
</bean>
由于 SACH
答案 0 :(得分:0)
作为recoveryInterval
的替代方法,您现在可以指定Backoff
(请参阅docs)。
它不提供停止容器的机制,但适当的退避可以有效地做你想要的。
然后,您需要以编程方式停止/开始再次启动它。