Я настраиваю приложение на основе микросервиса, где уровень агрегирования/шлюз API выполняет вызовы на микросервисы. Eureka используется для обнаружения услуг и ленты для обеспечения балансировки нагрузки RestTemplate.Eureka Ribbon LoadBalancer Задержка обновления кэша
Postman calls Aggregation -> Агрегирование звонков Микросертификация с использованием Eureka/Ribbon/RestTemplate.
У меня есть 4 экземпляра одного типа микросервисов, работающих на моей машине, на 4 разных портах. Нажатие одной и той же конечной точки REST неоднократно. Почтальон заставляет запросы правильно распределять нагрузку в круговом режиме.
Когда я останавливаю один из экземпляров микросервиса, служба отменяется с регистрации из Eureka, но LoadBalancer по-прежнему отправляет запросы мертвой службе, а вызов завершается с ошибкой.
Ниже мой код:
Aggregation:
@Configuration
@ComponentScan(basePackages = {"com.mycompany.aggregator"})
@EnableAutoConfiguration
@EnableEurekaClient
public class AggregatorApplication {
public static void main(String[] args) {
SpringApplication.run(AggregatorApplication.class, args);
}
}
**Configuration:**
@Configuration
public class AggregatorConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@Configuration
@RibbonClient(name="microservice", configuration = FooConfig.class)
public class TestConfig {
}
// FooConfig исключается из компонента сканирования
@Configuration
public class FooConfig {
@Bean
public IPing ribbonPing(IClientConfig config) {
return new NIWSDiscoveryPing();
}
@Bean
public IRule ribbonRule(IClientConfig config) {
return new AvailabilityFilteringRule();
}
}
restTemplate вызов:
ResponseEntity<Object> responseEntity = restTemplate.getForEntity(myUrl, Object.class);
Свойства:
spring.application.name=aggregator
server.contextPath=/ott
server.port = 8090
my.url=http://microservice
eureka.instance.leaseRenewalIntervalInSeconds=1
eureka.instance.leaseExpirationDurationInSeconds=2
MicroService Код:
@SpringBootApplication
@EnableEurekaClient
public class MicroServiceApplication
Свойства:
spring.application.name=microservice
server.contextPath=/ott
server.port = 9000
eureka.instance.leaseRenewalIntervalInSeconds=1
eureka.instance.leaseExpirationDurationInSeconds=2
Eureka Сервер:
@SpringBootApplication
@EnableEurekaServer
public class EurekaserverApplication {
Свойства:
server.port=8761
eureka.server.enableSelfPreservation=false
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
logging.level.com.netflix.eureka=OFF
logging.level.com.netflix.discovery=OFF