У меня есть метод прослушивателя, который обрабатывает сообщения, реализованные в облачном потоке Spring следующим образом:
@StreamListener(value = MyInterface.INPUT)
public void handleMsg(@Payload Foo foo) {
// if (concurrentHashMap.containsKey(foo.getId())) concurrentHashMap.remove(foo.getId());
}
вот мой второй метод, который должен быть заблокирован предыдущим:
public Foo getFoo(long fooId) {
// here I need block method with some mechanism until handleMsg remove received object from map and return this foo from there
return fooFromStream;
}
Моя цель - вызвать getFoo
метод из класса обслуживания следующим образом:
// some logic
Foo foo = service.getFoo(fooId);
// some logic which required received foo;
У меня была идея обернуть метод Foo в getFoo
в метод AsyncResult и вызвать следующий метод get
в отношении будущего результата того, что вызывает блок, но я понятия не имею, как передать foo из потока в метод getFoo
Вариант использования должен быть таким:
Я вызываю метод getFoo
, который отправляет foo в брокер сообщений и регистрирует foo на карте, и выполняет некоторую логику, а затем, когда команда выполнена, я получаю сообщение в StreamListenner, удаляю foo из карты, и затем мне нужно вернуть этот foo из метода getFoo
.
Можете ли вы сказать мне, как это сделать или как лучше всего это решить? Спасибо за совет.