查询网站注册信息,自己做的网站怎么上线,中山cp网站建设,厦门网站制作建设Ribbon #xff1a;处理客户端负载均衡和容错的解决方案
配置Ribbon的负载均衡
Rule接口#xff1a; 定义客户端负载均衡的规则
RandomRule :随机选择RoundRobinRuleZoneAvoidanceRule 配置ribbon的负载均衡策略
在配置文件中配置
user-center:ribbon:NFLoadBalancerRul…Ribbon 处理客户端负载均衡和容错的解决方案
配置Ribbon的负载均衡
Rule接口 定义客户端负载均衡的规则
RandomRule :随机选择RoundRobinRuleZoneAvoidanceRule 配置ribbon的负载均衡策略
在配置文件中配置
user-center:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule在java代码中配置
/**** 不同的服务使用不同的ribbon策略* RibbonClient : 表示这个配置是为xxx服务的**/
//Configuration
//RibbonClient(name user-center,configuration RibbonConfiguration.class)// 全局服务设置RibbonClients(defaultConfiguration RibbonConfiguration.class)
public class UserCenterRibbonConfiguration {
}如果是为某个微服务单独配置负载均衡策略 RibbonClient 指定配置文件的位置这个配置文件不能被springboot扫描到父子上下文环境就像spring和springmvc的环境不能重叠如果重叠相当于会变成全局的配置
Ribbon的配置文件
Configuration
public class RibbonConfiguration {Beanpublic IRule ribbonRule(){// 负载均衡策略为随机
// return new RandomRule();// 根据权重 这个类是自己写的根据权重判断return new NacosWeightedRule();}/*** 配置 ping的规则* return*/Beanpublic IPing ping(){return new PingUrl();}
}
写自己的负载均衡算法 继承AbstractLoadBalancerRule , 实现里面的 choose()方法
/**** nacos自带的 根据权重的负载均衡策略 需要配置在ribbon的负载均衡中*/
Slf4j
public class NacosWeightedRule extends AbstractLoadBalancerRule {AutowiredNacosDiscoveryProperties nacosDiscoveryProperties;/*** 初始化规则 获取配置信息以便在choose中使用* param clientConfig*/Overridepublic void initWithNiwsConfig(IClientConfig clientConfig) {}/*** 返回与该规则关联的负载均衡器 负载均衡器维护了服务实例列表* return*/Overridepublic ILoadBalancer getLoadBalancer() {return super.getLoadBalancer();}/*** 选择一个服务实例来处理请求 在这个方法中实现自己的负载均衡策略* param key* return*/Overridepublic Server choose(Object key) {try {/*** BaseLoadBalancer 基本的负载均衡策略 比如轮询round robin随机选择(Random),,,*/BaseLoadBalancer loadBalancer (BaseLoadBalancer) this.getLoadBalancer();// 想要请求的微服务的名称String name loadBalancer.getName();// 负载均衡算法 nacos内置了基于权重的算法NamingService namingService nacosDiscoveryProperties.namingServiceInstance();// nacos client 自动通过基于权重的负载均衡算法给我们一个实例Instance instance namingService.selectOneHealthyInstance(name);log.info(port {},instance {},instance.getPort(),instance);return new NacosServer(instance);} catch (NacosException e) {throw new RuntimeException(e);}}
}
在nacos中设置的权重就会生效 用到的类
ILoadBalancer : 是 netflix ribbon中负责管理服务实例列表 和 提供负载均衡策略的核心接口
getAllServers() 返回当前负载均衡器中维护的所有服务实例的列表addServers() 向负载均衡器中添加servicechooseServer() : 根据负载均衡规则选择一个实例来处理请求