我在SpringBoot中使用了resilience4j。我看到,只有将resilience4j批注放置在引发异常的类中时,它们才起作用。如果该类被另一个类扩展,并且父类具有注释,则重试将不起作用。
Resilience4j配置
resilience4j.retry:
instances:
service:
maxRetryAttempts: 5
waitDuration: 1000
retryException:
- com.common.exception.RetriableException
父母阶级
@Retry(name = "service")
@Component
public class httpClient extends client{
// This method is invoked from outside
public HttpResponse<T> getResponse(
String url, Class<T> responseType) {
return super.getResponse(url, requestEntity, responseType);
}
}
儿童班
@Retry(name = "service") // Without this line, the retries don't work, even though it is present in the parent class
@Component
public class client{
public HttpResponse<T> getResponse(
String url, Class<T> responseType) {
//Impl which throws RetriableException
}
}
这是预期的行为吗?你能告诉我我是否想念东西
答案 0 :(得分:1)
我以前从未使用过Resilience4j,但是我可以大致了解一下Java注释:
@Foo class Base
,也可以是抽象的) 可以 由子类(类似class Sub extends Base
之类) 当且仅当 时,注释类本身带有元注释@Inherited
。说了这么多,然后看着@Retry
注释,您会发现那里没有@Inherited
注释,因此它也无法在您的情况下使用。
如果有其他方法(例如通过反射)在Resilience4j中完成此操作,我不知道,因为正如我所说,我以前从未使用过。