Spring Cloud Feign

编程入门 行业动态 更新时间:2024-10-08 00:24:19

<a href=https://www.elefans.com/category/jswz/34/1769862.html style=Spring Cloud Feign"/>

Spring Cloud Feign

原文网址:Spring Cloud Feign--使用Nacos作为Ribbon的负载均衡策略_IT利刃出鞘的博客-CSDN博客

简介

        本文介绍Spring Cloud的Ribbon如何整合Nacos负载均衡器。

        之前介绍过,可以通过修改Nacos的权重来控制流量,但是这只对网关进来的请求有效,对于feign调用是无效的,因为Ribbon默认用的是自己的负载均衡器(ZoneAvoidanceRule)。想要feign调用支持Nacos权重配置,就要自定义负载均衡策略,将Nacos权重的策略作为ribbon的负载均衡器。

自定义Nacos负载均衡器

import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.ribbon.NacosServer;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import comflix.client.config.IClientConfig;
import comflix.loadbalancer.AbstractLoadBalancerRule;
import comflix.loadbalancer.BaseLoadBalancer;
import comflix.loadbalancer.Server;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.extern.slf4j.Slf4j;@Slf4j
public class NacosWeightLoadBalancerRule extends AbstractLoadBalancerRule {/*** NacosDiscoveryProperties内置了基于权重的负载均衡算法*/@Autowiredprivate NacosDiscoveryProperties nacosDiscoveryProperties;/*** 读取配置文件并初始化NacosWeightedRule*/@Overridepublic void initWithNiwsConfig(IClientConfig iClientConfig) {}/*** 实现基于权重的负载均衡算法*/@Overridepublic Server choose(Object o) {try {BaseLoadBalancer loadBalancer = (BaseLoadBalancer)this.getLoadBalancer();//请求的微服务名称String name = loadBalancer.getName();//获得Nacos的应用NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();//Nacos client通过基于权重的负载均衡算法,返回一个实例Instance instance = namingService.selectOneHealthyInstance(name);return new NacosServer(instance);} catch (NacosException e) {log.error("获取服务实例异常", e);return null;}}
}

指定自定义的负载均衡器

法1:配置类

import org.springframework.cloudflix.ribbon.RibbonClients;@Configuration
@RibbonClients(defaultConfiguration = {NacosWeightLoadBalancerRuleConfiguration.class})
public class DefaultRibbonLoadBalancerConfiguration {
}
import org.springframework.cloudflix.ribbon.RibbonClients;
import comflix.loadbalancer.IRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;public class DefaultRibbonLoadBalancerConfiguration {@Beanpublic IRule iRule(){return new NacosWeightLoadBalancerRule();}}

注意

不能将上边的两个类整合成一个,否则feign调用会失败。

法2:配置文件

order服务(调用者)application.yml:

# 被调用的微服务名
storage:ribbon:# 指定使用Nacos提供的基于权重的负载均衡NFLoadBalancerRuleClassName: com.order.nacos.NacosWeightLoadBalancerRule

更多推荐

Spring Cloud Feign

本文发布于:2024-02-28 04:08:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1767936.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Spring   Cloud   Feign

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!