У меня есть Spring Event Publisher и слушатель, где требование, как указано ниже:
- Инициирование события некоторым методом.
- Прослушивание события из класса слушателя
- Как только событие прослушивается, позвоните в другой микро-сервис
Так что в настоящее время я использую openfeign для вызова другого микро-сервиса.
Этот вызов работает нормальнокогда метод слушателя выполняется синхронно и происходит сбой, когда метод слушателя помечен как @ Async.
Ниже приведен пример кода: Конфигурация интерфейса Fiegn:
@AuthorizedFeignClient(name = "another-microservice")
public interface CustomFeignInterface {
@PostMapping("api/call")
public ResponseEntity<String> callMethod(@RequestBody Foo foo);
}
Spring Event Listener:
@Component
public class FooEventListener {
@Autowired
private CustomFeignInterface customFeignInt;
@Async
@EventListener
public void handleCustomEvent(Foo foo) {
try {
ResponseEntity<String> res = customFeignInt.callMethod(foo);
} catch (Exception e) {
e.printStackTrace();
}
}
}
В соответствии с приведенным выше кодом, вызов другого микро-сервиса работает идеально, когда я удаляю @Async, но не удается, когда я добавляю @Async в метод FooEventListener.handleCustomEvent(..)
.
Где-то я обнаружил, что Feign не поддерживает асинхронные вызовы: https://github.com/OpenFeign/feign/issues/361
Но все же мне нужно асинхронное поведение, как мне этого добиться?