Spring @Retryable具有基于客户端的可配置延迟

时间:2019-08-09 15:31:48

标签: spring-boot configuration spring-retry

我正在开发一个Spring Boot应用程序。从我的应用程序中,我们正在调用一个外部RestService,并希望在RestCall由于任何原因失败时重试。

我知道@Retryable应该在春季进行。我正在尝试使用参数实现类似以下的内容:

@Retryable(maxAttempts=3,value=RunTimeException.class,backoff = @Backoff(delay = 900000))

现在我的问题是,有多个客户端将调用此服务。当client1调用此服务时,我想在15分钟后发生故障时重试。当client2调用此服务时,我想在1秒后发生故障时重试。

所以我想知道是否有任何方法可以基于client1或client2配置可重试的延迟。

任何建议都是有帮助的。

1 个答案:

答案 0 :(得分:0)

您可以使用ThreadLocal<Long> @Bean存储延迟,然后使用delayExpression="@threadLocalBean.get()

但是,将线程暂停15分钟会有点严重。

在这种情况下,最好使用调度程序进行重试。