【发布时间】:2021-09-28 16:01:49
【问题描述】:
我正在使用的代码具有以下结构。
public interface SomeService {
Optional<SomeClass> getThing();
// more methods
}
public abstract class SomeServiceBase implements SomeService {
Optional<SomeClass> getThing() {
// logic
this.onGetThing();
}
protected abstract Optional<SomeClass> onGetThing();
}
此外,还有 3 个不同的类扩展 SomeServiceBase,每个类都调用不同的第 3 方外部 API 以获得一些结果,它们都实现了自己的 onGetThing() 版本。
class FooService extends SomeServiceBase { @Override protected Optional<SomeClass> onGetThing() { } }
class DooService extends SomeServiceBase { @Override protected Optional<SomeClass> onGetThing() { } }
class RooService extends SomeServiceBase { @Override protected Optional<SomeClass> onGetThing() { } }
有一个工厂服务连接上述所有三个服务,并根据从客户端传递到 API 的“提供者”返回正确的服务。
Optional<SomeClass> myThing = SomeServiceFactory.getService(provider).getThing();
我需要做的是,如果FooService 没有返回结果,我想用DooService 重试。但我正在努力寻找一种以某种通用的可重用方式实现这一点的好方法。任何帮助表示赞赏。如果我需要提供更多详细信息,请告诉我。
【问题讨论】:
标签: java spring spring-boot retry-logic