У меня есть приложение Spring Boot с многочисленными микро сервисами. Он использует eureka в качестве клиента обнаружения. В одной из служб есть процесс, который должен запускаться при запуске приложения, и в свою очередь он использует некоторые другие службы. Для достижения этого я использую прослушиватель событий:
@Service
public class MyService {
private OtherService otherService;
@Autowired
public MyService(final OtherService otherService) {
this.otherService = otherService;
}
// Run once upon application startup
@EventListener(ApplicationReadyEvent.class)
private void runInitially() {
otherService.doStuff();
}
}
Это прекрасно работает, когда я запускаю службы по очереди в правильном порядке, однако, если я запускаю их сразу (как я должен сделать в кажется, что otherService еще не зарегистрирован в Eureka, что приводит к таким ошибкам, как:
2020-04-17 09:59:35.879 ERROR 17568 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed
java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client: otherService
at org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient.execute(LoadBalancerFeignClient.java:90)
Есть ли способ сделать это с помощью прослушивателя, который будет регистрироваться, когда другие службы зарегистрированы? Также приветствуются другие альтернативы.