春季重试性能

时间:2019-02-22 01:49:20

标签: java spring rest spring-boot spring-retry

我在我的应用程序中使用spring retry,它工作正常。 但是,我只是担心如果有大量的重试会否导致性能问题

假设下游服务之一已关闭,并且在它恢复正常之前,有100万个请求进入,然后它将耗尽该服务执行正常操作的所有资源。

对此有什么解决办法吗?

2 个答案:

答案 0 :(得分:0)

使用Spring-retry(我的情况)只是一种意见或建议。

  
      
  1. 恢复
  2.   
  3. 补偿政策。
  4.   
  5. 重试计数。
  6.   

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;
        });
    }