四.负载均衡进阶之Ribbon和Feign实战

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

官方文档

Nacos支持Feign,可以直接集成实现负载均衡的效果

集成Open-Feign实现远程方法调用

Feign让方法调用更加解耦

使用feign步骤讲解:

  1. 加入依赖
复制代码
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 配置注解: 启动类增加@EnableFeignClients
  2. 增加一个接口:@FeignClient(name="yuan-video-service") (服务名称要和nacos保持一样)
  3. 编写代码:
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;写起来更加思路清晰和方便;采用注解方式进行配置,配置熔断等方式方便

评论区

评论系统加载区域 (例如 Disqus, Utterances 等)