搭建Eureka服务
Eureka的作用
- 消费者如何获取服务提供者的具体信息
- eureka也是服务,它会将自己也提交到注册中心,用于eureka集群之间通信
- 服务提供者启动时,向eureka注册自己的信息
- eureka保存这些信息
- 服务消费者根据服务名称向eureka拉取提供者的信息
- 如果有多个服务提供者,消费者该如何选择
- 先非洲如何感知服务提供者的健康状态
- 服务提供者会每隔30s向注册中心发送心跳请求,报告健康状态
- eureka会更新记录服务列表信息,心跳不正常会被剔除
- 消费者就可以拉取到最新的信息

添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
|
启动注解
@EnableEurekaServer @SpringBootApplication public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class,args); } }
|
配置文件
server: port: 5901 spring: application: name: eurekaserver eureka: client: service-url: defaultZone: http://127.0.0.1:5901/eureka
|
注册服务
引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
|
配置文件
spring: application: name: userServer eureka: client: service-url: defaultZone: http://127.0.0.1:5901/eureka
|
部署多个实例



服务拉取
@Override public Order queryOrderById(Long orderId) { Order order = orderMapper.findById(orderId); String url = "http://userServer/user/" + order.getUserId(); User user = restTemplate.getForObject(url, User.class); order.setUser(user); return order; }
|
@Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); }
|
Ribbon负载均衡
负载均衡原理

负载均衡策略
Ribbon的负载均衡规则是一个叫做IRule
的接口来定义的,每一个子接口都是一种规则

类名 |
规则描述 |
RoundRobinRule |
轮询规则,默认方法 |
AvailabilityFilteringRule |
忽略并发过高和短路状态的服务器 |
WeightedResponseTimeRule |
权重规则 |
ZoneAvoidanceRule |
以区域可用的服务器为基础进行服务器的选择。 |
BestAvailableRule |
忽略那些短路的服务器,并选择并发数较低的服务器。 |
RandomRule |
随机规则 |
RetryRule |
重试机制的选择逻辑 |
配置方法
在启动类中重写方法,返回值为你要的规则
@Bean public IRule randomRule(){ return new RandomRule(); }
|
或者在application.yml
中配置
userServer: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule# 负载均衡规则
|
懒加载
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
而饥饿加载则会在项目启动时创建,降低第一次访问的耗时。
ribbon: eager-load: enabled: true clients: userServer
|