Ribbon-1

使用Java代码实现Ribbon细粒度配置的坑(父子上下文):

Ribbon配置类不能与SpringBootApplication放在同个包下,防止被其扫描到,从而被当成Ribbon全局配置,而无法实现细粒度配置。

实现Ribbon细粒度配置:正常情况下,使用属性配置方式,而非Java代码方式

 

Ribbon首次加载速度慢,使用了懒加载

配置Ribbon饥饿加载

 

 

 

Ribbon支持Nacos权重

 1 public class NacosWeightedRule extends AbstractLoadBalancerRule {
 2     @Autowired
 3     private NacosDiscoveryProperties nacosDiscoveryProperties;
 4     @Override
 5     public void initWithNiwsConfig(IClientConfig clientConfig) {
 6         // 读取配置文件,并初始化NacosWeightedRule
 7     }
 8 
 9     @Override
10     public Server choose(Object key) {
11         try {
12             BaseLoadBalancer loadBalancer = (BaseLoadBalancer) this.getLoadBalancer();
13 //        log.info("lb = {}", loadBalancer);
14 
15             // 想要请求的微服务的名称
16             String name = loadBalancer.getName();
17 
18             // 拿到服务发现的相关API
19             NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();
20 
21             // nacos client自动通过基于权重的负载均衡算法,给我们选择一个实例。
22             Instance instance = namingService.selectOneHealthyInstance(name);
23 
24             log.info("选择的实例是:port = {}, instance = {}", instance.getPort(), instance);
25             return new NacosServer(instance);
26         } catch (NacosException e) {
27             return null;
28         }
29     }
30 }

 

posted @ 2022-06-05 17:19  roibin  阅读(28)  评论(0)    收藏  举报