如果代理已关闭/无法访问,则Spring JMS生成器应在重试之前等待可配置的持续时间。 是否可以在DefaultMessageListenerContainers中提供类似FixedBackOff的配置?
问题是我看到我的生产者正在无限地尝试连接到ActiveMQ代理,但生产者连接没有有效的证书链并引发SSL错误。此连接重试没有中断,并在几秒钟内生成一堆日志条目。 这只是SSL不正确的情况,但在生产过程中,代理会因维护而关闭,然后生产者应在连接重试之间等待。
或者有没有办法在发布消息之前检查JMS Producer连接状态。
环境:Spring JMS。 ActiveMQ的
答案 0 :(得分:1)
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;
}
默认情况下是这个:
private BackOff backOff = new FixedBackOff(DEFAULT_RECOVERY_INTERVAL, Long.MAX_VALUE);
Long.MAX_VALUE
参数代表maxAttempts
。
<强>更新强>
如果我们谈论的是JmsTemplate
,则必须从客户端代码的角度来完成重试逻辑。这是一个被动组件,没有任何后台线程在DefaultMessageListenerContainer
的情况下做一些工作。
为了进行基于客户端的重试,我们建议使用Spring Retry项目。要配置RetryTemplate
和RetryPolicy
。然后,您只需使用JmsTemplate
包装器调用RetryTemplate.execute()
- 并根据策略重试任何错误。