zoukankan      html  css  js  c++  java
  • 第十二节--Ribbon

    具体的在第一季教程中
     
     Ribbon(读音: rɪbən)是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,
      实现客户端负载均衡的工具
     
       负载均衡分为:集中式,进程内两种
       常见的负载均衡有软件Nginx,LVS,硬件F5等
     
       Ribbon本地负载均衡客户端 对比  Nginx服务端负载均衡区别
       Nginx是服务器负载均衡,客户端所有请求都会交给Nginx,然后由Nginx实现转发请求。即负载均衡是由服务端实现的。(集中式)
       Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术(进程内)
     
    第一步: 新建工程:这里使用的是cloud-consumer-order80为消费端,提供方使用cloud-provider-payment8001,cloud-provider-payment8002, 两个提供者工程一样,为了测试负载均衡。在pom.xml中加入依赖, 在springboot2.x版本之后,
    只需要和eureka整和的包,eureka中已经和ribbon进行整合,已经存在所对应的包,所以不需要加入
    <!--eureka客户端:在springboot2.x版本之后已经和Ribbon进行整和,不需要加入Ribbon相关依赖-->
    <!-- 将微服务provider注册进eureka:引入eureka客户端 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    第二步:RestTemplate必须加上@LoadBalanced 注解 
    @Configuration
    public class ApplicationConfig {
    
    @Bean
    @LoadBalanced
    public RestTemplate getTemplate(){
    return new RestTemplate();
    }
    }

    第三步:controller类

    //使用getForEntity
    @GetMapping("/consumer/findPaymentList")
    public CommonResult findPaymentList(){
    log.info("查询所有数据");
    //alt+entity打处返回值提示
    ResponseEntity<CommonResult> forEntity = restTemplate.getForEntity(PAYMENT_URL + "/admin/findPaymentList", CommonResult.class);
    if(forEntity.getStatusCode().is2xxSuccessful()) {
    return new CommonResult(200, "查找数据成功", forEntity.getBody());
    }else{
    return new CommonResult(400,"没有对应的记录");
    }
    }
     
    默认的算法为轮询

     
     Ribbon自定义算法
     1.在主启动类使用@RibbonClient注解,让程序启动时自动注入
        
      //在主启动类配置,启动微服务的时候取加载我们自定义的ribbon
    @RibbonClient(name="MICROSERVICECLOUD-DEPT",configuration=MySelRule.class)
    @EnableEurekaClient//将服务注册到eureka服务注册中心
    @SpringBootApplication
    public class ConsumerDeptApplication80 {
         public static void main(String[] args) {
              SpringApplication.run(ConsumerDeptApplication80.class, args);
         }
    }

    2.编写MySelRule算法类,之前写的是在RestTemplate配置类中,不推荐

    @Configuration
    public class MySelRule {
         //配置随机负载均衡算法,会自动覆盖之前默认的轮询算法
         @Bean
         public IRule myRule(){
              return new RandomRule();
         }
    }
     
     
  • 相关阅读:
    图的最大匹配算法
    二分图的最小顶点覆盖 最大独立集 最大团
    后缀数组:倍增法和DC3的简单理解
    后缀自动机浅析
    微积分学习笔记一:极限 导数 微分
    微积分学习笔记二
    微积分学习笔记三:定积分
    微积分学习笔记四:空间向量基础
    微积分学习笔记五:多元函数微积分
    程序员之路--回顾2015,展望2016
  • 原文地址:https://www.cnblogs.com/hexublog/p/13681832.html
Copyright © 2011-2022 走看看