Eureka 是netflix开发的服务发现框架,实现负载均衡和服务注册中心的功能。
在集群的环境下,服务A有多台服务器,服务器地址不同,服务B向服务A发起数据请求时该向哪个服务器发起请求呢?由于服务器不止一个且地址不同那么使用代码普通的实现就很复杂,不仅要考虑所有的服务器还要考虑选择的策略,Eureka作为一个中间件就解决了这个问题。服务A向Eureka注册服务Aserver,将多个服务器地址都注册上去,服务B请求服务A时向Eureka请求Aserver而不是具体地址,Eureka服务器会根据负载均衡的策略选择一个A服务器并且将其和B连接上。
1、导入依赖
服务器端依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-server
客户端依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-client
2、配置文件
配置服务名称
spring:
application:
name: userserver
配置Eureka服务器地址
eureka:
client:
service-url:
defaultZone: http://localhost:8088/eureka
服务调用:当order服务调用user服务时不会通过具体的url地址去访问,而是通过注册到eureka服务中的userserver这个虚拟地址访问。
restTemplate.getForObject("http://userserver/getUserById/" + userId, User.class);
3、当一个server对应多台服务器时,该怎么选择呢
Ribbon负载均衡。
@Bean
@LoadBalanced //Ribbon负载均衡,会将restTemplate的请求进行拦截并且向Eureka请求
RestTemplate restTemplate(){
return new RestTemplate();
}
@Bean
public IRule ribbonRule(){
// return new RoundRobinRule();
// return new WeightedResponseTimeRule();
return new RandomRule();
}



