У меня есть метод обслуживания, который возвращает DefferedResult<Foo>
через несколько секунд, но мне нужно, чтобы мой код дождался завершения этого метода и возвратил отложенный результат с заданным результатом.
Вот пример кода:
@Service
public class FooService {
// ...
public DeferredResult<Foo> fetchFoo(long id) throws InterruptedException {
DeferredResult<Foo> fooDeferredResult = new DeferredResult<>();
concurrentMap.put(id, fooDeferredResult);
return fooDeferredResult;
}
// this you can figure out as some handler or scheduler which receive messages and is called
public void anotherMethod(Foo foo) {
DeferredResult<Foo> remove = concurrentMap.remove(foo.getId());
remove.setResult(foo);
}
// ...
}
и я хочу позвонить в другой сервис:
@Service
public class AnotherService {
@Autowired
FooService fooService;
public Foo bar(long id) {
// some logic
Foo foo = fooService.fetchFoo(id).getResult();
// another logic which depends on received foo
// there I need wait for result of fetchFoo method
return foo;
}
}
Подскажите пожалуйста, как обеспечить такое поведение? Спасибо за совет.