我有一个与activemq代理交互的spring JMS应用程序。如果应用程序无法访问代理,则会无限期地重试。如何在我的DefaultJmsListenerContainerFactory
bean中配置activemq.xml文件或soemthing,以便它不会无限期地重试?
我看到对activemq ReconnectionPolicy的引用,但我不确定如何在activemq.xml中设置它,或者它是否可以在JMS容器工厂中设置
答案 0 :(得分:1)
在侦听器容器工厂上设置BackOff
。
/**
* Specify the {@link BackOff} instance to use to compute the interval
* between recovery attempts. If the {@link BackOffExecution} implementation
* returns {@link BackOffExecution#STOP}, this listener container will not further
* attempt to recover.
* <p>The {@link #setRecoveryInterval(long) recovery interval} is ignored
* when this property is set.
* @since 4.1
*/
ExponentialBackOff
会增加尝试次数,自定义BackOff
可以返回BackOffExecution.STOP
,容器将stop()
本身。可以使用FixedBackOff
配置maxAttempts
。
您还可以在容器注册表(或使用其stop()
从注册表中获取的单个容器)上调用id
。
答案 1 :(得分:1)
在DefaultJmsListenerContainerFactory级别,您可以像这样设置:
FixedBackOff fbo = new FixedBackOff(); // or ExponentialBackOff
fbo.setMaxAttempts(10);
fbo.setInterval(5000);
DefaultJmsListenerContainerFactory djlcf = new DefaultJmsListenerContainerFactory();
djlcf.setBackOff(fbo);
在org.springframework.jms.listener.DefaultMessageListenerContainer.setBackOff(BackOff)
<强>更新强>
只能通过更改
上的网址来使用FailoverTransportActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("failover:(tcp://host:61617)?maxReconnectAttempts=10");