如何限制activemq实例上的重新连接数

时间:2017-02-21 14:37:09

标签: java activemq spring-jms

我有一个与activemq代理交互的spring JMS应用程序。如果应用程序无法访问代理,则会无限期地重试。如何在我的DefaultJmsListenerContainerFactory bean中配置activemq.xml文件或so​​emthing,以便它不会无限期地重试?

我看到对activemq ReconnectionPolicy的引用,但我不确定如何在activemq.xml中设置它,或者它是否可以在JMS容器工厂中设置

2 个答案:

答案 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)

<强>更新

只能通过更改

上的网址来使用FailoverTransport
ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("failover:(tcp://host:61617)?maxReconn‌​ectAttempts=10");

看看activemq.apache.org/failover-transport-reference.html