美文网首页Java
springcloud之ribbon

springcloud之ribbon

作者: GG_lyf | 来源:发表于2021-01-07 15:56 被阅读0次

前言

  在好多微服务同时注册进一个注册中心的时候,就会出现单点登录的问题,这时候就可以增加注册中心的个数,从而解决单点登录的问题,但是还是会出现之访问一个注册中心的问题,这时候就要用eureka自带的ribbon来实现负载均衡了。


开搞

1.在现有的springboot项目中创建两个eureka微服务,带启动类,并且用的是maven创建的(eureka中相互注册)

eureka:
  instance:
    hostname: eureka
  client:
    fetch-registry: false #是否从eureka中获取注册信息
    register-with-eureka: false #是否将自己注册进eureka,本身就在,无需注册
    service-url:
      defaultZone: http://localhost:第一个端口/eureka/,http://localhost:第二个端口/eureka/

2.注册中心的同级目录下创建两个客户端微服务,带启动类,spring.application.name都叫client

3.两个客户端都注册进两个注册中心

eureka:
  instance:
    prefer-ip-address: true
  client:
    service-url:
      defaultZone: http://localhost:第一个端口/eureka/,http://localhost:第二个端口/eureka/

4.两个客户端都写同一个方法

@RestController
public class Client2Controller {
  @Value("${server.port}")
  private String port;

  @GetMapping("/home")
  public String homePage() {
    return "这是客户端1或2,端口是" + " : " + port;
  }
}

5..注册中心的同级目录下创建ribbon微服务,也同时注册进两个注册中心

defaultZone: http://localhost:第一个端口/eureka/,http://localhost:第二个端口/eureka/

6.写config

@Configuration
public class LoadConfig {
  @Bean
  @LoadBalanced//开启ribbon
  public RestTemplate getRestTemplate() {
    return new RestTemplate();//远程调用
  }

  @Bean
  public IRule getIRule() {

    /*
    每一个类就是一种负载均衡算法
    RoundRobinRule 轮询
    RandomRule 随机
    AvailabilityFilteringRule 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数超过阈值的服务,然后对剩余的服务列表进行轮询
    WeightedResponseTimeRule 权重 根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高。刚启动时,如果统计信息不足,则使用轮询策略,等信息足够,切换到 WeightedResponseTimeRule
    RetryRule 重试 先按照轮询策略获取服务,如果获取失败则在指定时间内重试,获取可用服务
    BestAvailableRule 选过滤掉多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
    ZoneAvoidanceRule 符合判断server所在区域的性能和server的可用性选择服务
    */
    // 默认轮询算法
     return new RoundRobinRule() ;
  }
}

7.写controller

@RestController
@RequestMapping("test")
public class ConsumeController {

  @Autowired
  private RestTemplate restTemplate;

  @GetMapping("/showInfo")
  public String showInfo() {
    return restTemplate.getForObject("http://client/home", String.class);//获取某一个客户端的那个方法
  }

}

8.两个eureka的控制台

第一个 第二个

9.访问ribboncontroller的那个方法,之前默认用的是轮询算法

第一次 第二次

相关文章

网友评论

    本文标题:springcloud之ribbon

    本文链接:https://www.haomeiwen.com/subject/dbuboktx.html