是否可以在重试事件中将参数更改为以@Retryable注释的类中的方法?

时间:2019-09-11 11:31:48

标签: micronaut

我有一个用@Retryable注释的单例类。在此过程中,我们使用@Client进行调用,并带有作为参数传递的auth令牌。

如果身份验证已过期,我们希望重新进行身份验证,然后使用更新的令牌重试方法调用。

我们处理RetryEvent并获得一个新令牌,但是我们无法更新原始方法调用参数。该方法返回一个Single

类似的东西:

@Retryable
@Singleton
class test {
    @Inject TestRestClient testRestClient

   Single<E> getStuff(AuthClient auth, String param) {
      testRestClient.apiCall(auth.token, param).map{ stuff -> 
         do some stuff as E
      }
   }
}

// Retry Handler

@Singleton
class AuthRetryEventListener implements ApplicationEventListener<RetryEvent> {

    @Inject
    AuthService authService

    @Override
    void onApplicationEvent(RetryEvent event) {
        MutableArgumentValue argumentValue = event.source.parameters.find{it.value.value.class in AuthClient.class}?.value
        if(argumentValue){
            AuthClient authClient = argumentValue.value as AuthClient
            authService.refresh(authClient)
            argumentValue.setValue(authClient)
        }
    }
}

这是解决这个问题的正确方法吗?如何使用更新后的参数再次进行方法调用?

谢谢。

1 个答案:

答案 0 :(得分:0)

@Retryable的全部要点是重试原始呼叫。您尝试执行的操作不适合@Retryable的用例。这很可能更适合在过滤器中实现。