我正在建立一个基于微服务的应用程序,其中聚合层/API 网关调用微服务。Eureka 用于服务发现,Ribbon 用于提供负载平衡 RestTemplate。
Postman 调用 Aggregation--> Aggregation 使用 Eureka/Ribbon/RestTemplate 调用微服务。
我在我的机器上的 4 个不同端口上运行了 4 个一种微服务类型的实例。Postman 反复访问同一个 REST 端点会导致请求以循环方式正确地进行负载平衡。
当我停止其中一个微服务实例时,该服务已从 Eureka 注销,但 LoadBalancer 仍向死服务发送请求并且调用失败。
下面是我的代码:
聚合:
@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();
}
}
休息模板调用:
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
微服务代码:
@SpringBootApplication
@EnableEurekaClient
public class MicroServiceApplication
特性:
spring.application.name=microservice
server.contextPath=/ott
server.port = 9000
eureka.instance.leaseRenewalIntervalInSeconds=1
eureka.instance.leaseExpirationDurationInSeconds=2
尤里卡服务器:
@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