项目
博客
文档
归档
资源链接
关于我
项目
博客
文档
归档
资源链接
关于我
四.负载均衡进阶之Ribbon和Feign实战
2020-11-14
·
softbabet博主
·
原创
·
微服务
·
本文共 242个字,预计阅读需要 1分钟。
### ribbon服务间调用负载均衡源码分析 ### AlibabaCloud负载均衡策略略调整 - Ribbon支持的负载均衡策略介绍 | 策略类 | 命名 | 描述 | | ------------------------- | ------------------ | ------------------------------------------------------------ | | RandomRule | 随机策略 | 随机选择server | | RoundRobinRule | 轮询策略 | 按照顺序选择server(默认) | | RetryRule | 重试策略 | 当选择server不成功,短期内尝试选择一个可用的server | | AvailabilityFilteringRule | 可用过滤策略 | 过滤掉一直失败并被标记为circuit tripped的server,过滤掉那些高并发链接的server(active connections超过配置的阈值) | | WeightedResponseTimeRule | 响应时间加权重策略 | 根据server的响应时间分配权重,以响应时间作为权重,响应时间越短的服务器被选中的概率越大,综合了各种因素,比如:网络,磁盘,io等,都直接影响响应时间 | | ZoneAvoidanceRule | 区域权重策略 | 综合判断server所在区域的性能,和server的可用性,轮询选择server | - 负载均衡策略调整实战 ``` #订单服务增加配置 yuan-video-service: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule ``` 策略选择: 1、如果每个机器配置一样,则建议不修改策略 (推荐) 2、如果部分机器配置强,则可以改为 WeightedResponseTimeRule ### 微服务新一代负载均衡组件Open-Feign介绍 `原先ribbon`代码存在的`问题`:不规范,风格不统一,维护性比较差 **什么是Feign** > SpringCloud提供的伪http客户端(本质还是用http),封装了Http调用流程,更适合面向接口化,让用Java接口注解的方式调用Http请求。不用像Ribbon中通过封装HTTP请求报文的方式调用`Feign默认集成了Ribbon` [官方文档](https://spring.io/projects/spring-cloud-openfeign) **`Nacos支持Feign,可以直接集成实现负载均衡的效果`** ### 集成Open-Feign实现远程方法调用 `Feign让方法调用更加解耦` 使用feign步骤讲解: 1. 加入依赖 ```
org.springframework.cloud
spring-cloud-starter-openfeign
``` 2. 配置注解: 启动类增加`@EnableFeignClients` 3. 增加一个接口:@FeignClient(name="yuan-video-service") (服务名称要和nacos保持一样) 4. 编写代码: ```java @GetMapping(value = "/api/v1/video/find_by_id") Video findById(@RequestParam("videoId") int videoId) ``` ### post方式对象传输Open-Feign实现远程方法调用 GET方式查询简单,POST方式提交如下: ``` //订单服务这边 @PostMapping(value = "/api/v1/video/save") Video saveVideo(@RequestBody Video video); @PostMapping("save") public Object save(@RequestBody Video video){ System.out.println(video.getTitle()); return video; } ``` 注意:路径核对;Http方法必须对应;使用服务提供方用@RequestBody,要使用@PostMapping Ribbon和feign两个的区别和选择: 选择feign;默认集成了ribbon;写起来更加思路清晰和方便;采用注解方式进行配置,配置熔断等方式方便