Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 我可以为JMSTemplate生产者定义固定退避策略吗_Spring_Jms_Spring Integration - Fatal编程技术网

Spring 我可以为JMSTemplate生产者定义固定退避策略吗

Spring 我可以为JMSTemplate生产者定义固定退避策略吗,spring,jms,spring-integration,Spring,Jms,Spring Integration,如果代理关闭/无法访问,SpringJMS生产者应在重试之前等待一段可配置的时间。 是否可以在DefaultMessageListenerContainers中提供类似FixedBackOff的配置 问题是,我看到我的生产者正在无限制地尝试连接到ActiveMQ代理,但生产者连接没有有效的证书链,并抛出SSL错误。此连接重试不会中断,并在几秒钟内生成大量日志条目。 这只是一个SSL不正确的场景,但在生产中,代理被关闭以进行维护,然后生产商应在连接重试之间等待 或者,是否有一种方法可以在发布消息之

如果代理关闭/无法访问,SpringJMS生产者应在重试之前等待一段可配置的时间。 是否可以在DefaultMessageListenerContainers中提供类似FixedBackOff的配置

问题是,我看到我的生产者正在无限制地尝试连接到ActiveMQ代理,但生产者连接没有有效的证书链,并抛出SSL错误。此连接重试不会中断,并在几秒钟内生成大量日志条目。 这只是一个SSL不正确的场景,但在生产中,代理被关闭以进行维护,然后生产商应在连接重试之间等待

或者,是否有一种方法可以在发布消息之前检查JMS生产者连接状态


环境:SpringJMS。ActiveMQ确实在DefaultMessageListenerContainer上有一个选项可供配置:

/**
 * 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
 */
public void setBackOff(BackOff backOff) {
    this.backOff = backOff;
}
Long.MAX_VALUE参数表示最大尝试次数

更新

如果我们讨论的是JmsTemplate,那么重试逻辑必须从客户机代码的角度进行。这是一个被动组件,并没有任何后台线程像DefaultMessageListenerContainer那个样执行某些工作


对于基于客户端的重试,我们建议一个项目。要配置RetryTemplate和RetryPolicy。然后用RetryTemplate.execute包装器调用JmsTemplate,任何错误都将根据策略重试。

谢谢。我正在寻找JmsTemplet连接中的回退。DMLC中没有。请参阅我答案中的更新。
private BackOff backOff = new FixedBackOff(DEFAULT_RECOVERY_INTERVAL,  Long.MAX_VALUE);