第十二节--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();
     }
}
 
 
原文地址:https://www.cnblogs.com/hexublog/p/13681832.html