具体的在第一季教程中
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(); } }