我在我的应用程序中使用spring retry,它工作正常。 但是,我只是担心如果有大量的重试会否导致性能问题
假设下游服务之一已关闭,并且在它恢复正常之前,有100万个请求进入,然后它将耗尽该服务执行正常操作的所有资源。
对此有什么解决办法吗?
答案 0 :(得分:0)
使用Spring-retry
(我的情况)只是一种意见或建议。
- 恢复
- 补偿政策。
- 重试计数。
Spring-retry
使用户可以针对引发的不同异常定义多种重试方法。
您应该相应地处理那些异常..例如,如果某个方法具有一些严重的异常,则是否应该尝试(应该决定)。
建议::
@Recover
方法因指定的异常而失败时,使用@Retryable
注释定义一个单独的恢复方法。您可以将事物存储在数据库中以进行进一步处理。
@Recover
void recover(SQLException e, String sql){ // Your Code of Handling...}
现在,如果您知道在下次重试中可以处理引发的异常,则应应用BackOff
策略。以便可以进行相应处理。.
答案 1 :(得分:0)
当预计在短时间内有数百万个请求时,spring-retry @CircuitBreaker可以帮助停止调用下游系统,并减少对性能的影响。
@CircuitBreaker(value = {RunTimeException.class},
maxAttempts = 2,
openTimeout = 2000L ,
resetTimeout = 20000L)
public void myMethod(String aaa){
retryTemplate.execute(args0 -> {
// your business logic goes here
return null;
});
}