OpenFeign 是 Spring Cloud 家族的一个成员, 它最核心的作用是为 HTTP 形式的 Rest API 提供了非常简洁高效的 RPC 调用方式
...
...
接口类上:@FeignClient("被调用的服务器名")
启动类上:@EnableFeignClients
然后在需要使用的地方@Resource注入
OpenFeign的用途及实现原理
openfeign的用途:服务发现,负载均衡,服务调用
openfeign的实现原理:基于@EnableFeignClients 将所有被@FeignClient注解的类 注册到容器中。当这些被@FeignClient注解的类被调用时会创建一个动态代理的对象为我们创建被调用类的实例,然后都会被统一转发给 Feign 框架所定义的一个 InvocationHandler , 由该 Handler 完成后续的 HTTP 转换, 发送, 接收, 翻译HTTP响应的工作。
在SpringCloud中,Ribbon可以实现服务调用和负载均衡,而OpenFeign基于注解加接口的服务调用方式比Ribbon看起来更加简洁,那我们在使用OpenFeign实现服务调用时,如何修改负载均衡策略呢?
随机(Random)算法:在实例列表中随机选择某个实例
轮询(RoundRobin)算法:按顺序选择实例
最少连接数(Least Connections)算法:每次取连接数最少的实例
一致性哈希(Consistent Hashing)算法:基于一致性哈希算法总是将相同参数的请求落在同一个实例上
权重随机(Weigthd Random):随机取一个数,根据这个数属于哪个范围选择对应的实例
Ribbon内置负载均衡算法
1、 RoundRobinRule
轮询策略:Ribbon 默认采用的策略。若经过一轮轮询没有找到可用的provider,其最多轮询 10 轮(代码中写死的,不能修改)。若还未找到,则返回 null。
2、RandomRule
随机策略:从所有可用的 provider 中随机选择一个。
3、RetryRule
重试策略:先按照 RoundRobinRule 策略获取 server,若获取失败,则在指定的时限内重试。默认的时限为 500 毫秒。
4、BestAvailableRule
最可用策略:选择并发量最小的 provider,即连接的消费者数量最少的provider。其会遍历服务列表中的每一个server,选择当前连接数量minimalConcurrentConnections 最小的server。
5、AvailabilityFilteringRule
可用过滤算法:该算法规则是过滤掉处于熔断状态的 server 与已经超过连接极限的server,对剩余 server 采用轮询策略。