SpringCloud(三)之客户端调用

本文主要讲解spring-cloud-openfeign介绍,以及微服务之间通过Feign如何调用。SpringBoot与Cloud版本:2.6.1->2021.0.0,微服务系列文章持续更新中......

1、什么是Feign

Feign是由Netflix开发出来的另外一种实现负载均衡的开源框架,它封装了Ribbon和RestTemplate,实现了WebService的 面向接口编程,进一步的减低了项目的耦合度,因为它封装了Riboon和RestTemplate,所以它具有这两种框架的功能,可以 实现负载均衡和Rest调用。

2、为什么需要Feign

多个微服务是互相隔离的,那么微服务和微服务之间如何互相调用呢?

显然两个微服务都可以采用http通信,可以通过restTemplate+Ribbon组合进行互相访问,并实现负载均衡。但是这种方式对参数传递和使用都不是很方便,我们需要配置请求head、body,获得响应体后,还需解析等操作,十分繁琐。采用Feign进行服务之间的调用,可以简化调用流程,真正感觉到是在同一个项目中调用另一个类的方法的欢快感。本文主要讲解Feign的方式调用。

3、如何使用

第一步 :引入依赖

<dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

第二步: 在启动类上面加上注解:@EnableFeignClients,开启Feign

第三步: 然后编写一个service接口加上@FeignClient()注解 参数就是你的微服务服务名

服务我使用上篇中的cloud-client  =》SpringCloud之服务注册与发现(下)

/** * @Author Mr.Fire * @Desc Feign调用代理 * @Date 2021/12/5 */@FeignClient("cloud-client")public interface FeignCilentProxy {
    @RequestMapping("/order")    public String feignTest();}

第五步:调用

直接引入写好的Feign代理接口,调用对应方法,跟调用本地方法一样。

@RestControllerpublic class TestController {    @Autowired    FeignCilentProxy feignCilentProxy;
    @GetMapping("/getOrder")    public String orderTest(){       String order = feignCilentProxy.feignTest();       System.out.println(order);       return "success";    }}

第四步:测试

由于我只写了一个服务cloud-client,因此我通过不同端口启动四个服务来测试负载均衡的效果。

测试效果:可以看到Feign已经实现了负载均衡

图片

4、负载均衡

负载均衡就是将请求分摊给多个实例进行进行处理。根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端负载均衡。

服务端负载均衡指的是发生在服务提供者一方,比如常见的nginx负载均衡。客户端负载均衡指的是发生在服务请求的一方,也就是在服务请求之前已经选好了由哪个实例进行处理。

我们在微服务中一般会选择客户端负载均衡,Ribbon就是在客户端进行了负载。Feign默认继承了Ribbon,所以自带负载均衡效果,默认轮询策略。

Ribbon支持的负载均衡策略

策略类

命名

描述

RandomRule

随机策略

随机选择server

RoundRobinRule

轮询策略

按照顺序选择server(ribbon默认策略)

RetryRule

重试策略

在一个配置时间段内,当选择server不成功,则一直尝试选择一个可用的server

BestAvailableRule

最低并发策略

逐个考察server,如果server断路器打开,则忽略,再选择其中并发链接最低的server

AvailabilityFilteringRule

可用过滤策略

过滤掉一直失败并被标记为circuit tripped的server,过滤掉那些高并发链接的server(active connections超过配置的阈值)

ResponseTimeWeightedRule

响应时间加权重策略

根据server的响应时间分配权重,响应时间越长,权重越低,被选择到的概率也就越低。响应时间越短,权重越高,被选中的概率越高,这个策略很贴切,综合了各种因素,比如:网络,磁盘,io等,都直接影响响应时间

ZoneAvoidanceRule

区域权重策略

综合判断server所在区域的性能,和server的可用性,轮询选择server并且判断一个AWS Zone的运行性能是否可用,剔除不可用的Zone中的所有server

如何修改策略:​​​​​​​

#cloud-client为服务名称,指明对哪个服务进行配置cloud-client.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

5、总结

目前,在Spring cloud 中服务之间通过restful方式调用有两种方式 restTemplate+Ribbon 或者feign。Feign 是一个使用起来更加方便的 HTTP 客戶端,使用起来就像是调用自身工程的方法,而感觉不到是调用远程方法,写起来更加思路清晰和方便,采用注解方式进行配置,配置熔断等方式方便。

 

关注公众号,回复666,领取干货

图片

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值