38.Ribbon

image
image

Ribbon默认是懒加载,所以初次请求时间最长,后续请求会变快,可以通过修改为饥饿加载

ribbon.eager-load.enabled=true
ribbon.eager-load.clients=user-center

Ribbon策略的两种配置方式

  1. Java 配置Ribbon
package com.itmuch.contentcenter.configuration;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.context.annotation.Configuration;
import ribbonconfiguration.RibbonConfiguration;
/**
 * 局部配置,只针对 user-center 起作用
 * @Configuration
 * @RibbonClient(name = "user-center", configuration = RibbonConfiguration.class)
 */
/**
 * 全局配置,对所有ribbon起作用
 * 如果需要用的话,UserCenterRibbonConfiguration类名修改一下会更语义化
 * @Configuration
 * @RibbonClients(defaultConfiguration = RibbonConfiguration.class)
 */
public class UserCenterRibbonConfiguration {
}
  1. application.properties
# ribbon配置策略 <clientName>.ribbon.NFLoadBalancerRuleClassName
user-center.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RoundRobinRule

自定义Nacos权重策略

/**
 * Created by Guaguaerhao on 2022/4/27 2:36 下午
 * 自定义Nacos权重策略
 */
@Slf4j
public class NacosWeightedRule extends AbstractLoadBalancerRule {
    @Autowired
    private NacosDiscoveryProperties nacosDiscoveryProperties;

    @Override
    public void initWithNiwsConfig(IClientConfig clientConfig) {
        //读取配置文件,并初始化NacosWeightedRule
    }

    @Override
    public Server choose(Object key) {
        try {
            BaseLoadBalancer baseLoadBalancer = (BaseLoadBalancer) this.getLoadBalancer();
//            log.info("lb = {}", baseLoadBalancer);
            // 想要请求的微服务的名称
            String name = baseLoadBalancer.getName();

            //拿到服务发现的相关api
            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) {
            e.printStackTrace();
        }
        return null;
    }
}
posted @ 2022-04-27 14:05  呱呱二号  阅读(20)  评论(0编辑  收藏  举报