前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊NacosRibbonClientConfiguration

聊聊NacosRibbonClientConfiguration

原创
作者头像
code4it
修改2019-07-31 10:07:47
1.6K0
修改2019-07-31 10:07:47
举报
文章被收录于专栏:码匠的流水账

本文主要研究一下NacosRibbonClientConfiguration

NacosRibbonClientConfiguration

spring-cloud-alibaba-0.9.0.RELEASE/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRibbonClientConfiguration.java

代码语言:javascript
复制
@Configuration
@ConditionalOnRibbonNacos
public class NacosRibbonClientConfiguration {
​
    @Bean
    @ConditionalOnMissingBean
    public ServerList<?> ribbonServerList(IClientConfig config, NacosDiscoveryProperties nacosDiscoveryProperties) {
        NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties);
        serverList.initWithNiwsConfig(config);
        return serverList;
    }
}
  • NacosRibbonClientConfiguration会创建NacosServerList

NacosServerList

spring-cloud-alibaba-0.9.0.RELEASE/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServerList.java

代码语言:javascript
复制
public class NacosServerList extends AbstractServerList<NacosServer> {
​
    private NacosDiscoveryProperties discoveryProperties;
​
    private String serviceId;
​
    public NacosServerList(NacosDiscoveryProperties discoveryProperties) {
        this.discoveryProperties = discoveryProperties;
    }
​
    @Override
    public List<NacosServer> getInitialListOfServers() {
        return getServers();
    }
​
    @Override
    public List<NacosServer> getUpdatedListOfServers() {
        return getServers();
    }
​
    private List<NacosServer> getServers() {
        try {
            List<Instance> instances = discoveryProperties.namingServiceInstance()
                    .selectInstances(serviceId, true);
            return instancesToServerList(instances);
        }
        catch (Exception e) {
            throw new IllegalStateException(
                    "Can not get service instances from nacos, serviceId=" + serviceId,
                    e);
        }
    }
​
    private List<NacosServer> instancesToServerList(List<Instance> instances) {
        List<NacosServer> result = new ArrayList<>();
        if (null == instances) {
            return result;
        }
        for (Instance instance : instances) {
            result.add(new NacosServer(instance));
        }
​
        return result;
    }
​
    public String getServiceId() {
        return serviceId;
    }
​
    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {
        this.serviceId = iClientConfig.getClientName();
    }
}
  • NacosServerList继承了com.netflix.loadbalancer.AbstractServerList,其getInitialListOfServers及getUpdatedListOfServers方法都是调用了getServers;getServers方法则是通过NamingService.selectInstances来获取服务实例信息

NacosServer

spring-cloud-alibaba-0.9.0.RELEASE/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosServer.java

代码语言:javascript
复制
public class NacosServer extends Server {
​
    private final MetaInfo metaInfo;
    private final Instance instance;
    private final Map<String, String> metadata;
​
    public NacosServer(final Instance instance) {
        super(instance.getIp(), instance.getPort());
        this.instance = instance;
        this.metaInfo = new MetaInfo() {
            @Override
            public String getAppName() {
                return instance.getServiceName();
            }
​
            @Override
            public String getServerGroup() {
                return null;
            }
​
            @Override
            public String getServiceIdForDiscovery() {
                return null;
            }
​
            @Override
            public String getInstanceId() {
                return instance.getInstanceId();
            }
        };
        this.metadata = instance.getMetadata();
    }
​
    @Override
    public MetaInfo getMetaInfo() {
        return metaInfo;
    }
​
    public Instance getInstance() {
        return instance;
    }
​
    public Map<String, String> getMetadata() {
        return metadata;
    }
}
  • NacosServer继承了com.netflix.loadbalancer.Server;它主要有metaInfo、instance、metadata三个属性

小结

NacosRibbonClientConfiguration会创建NacosServerList;NacosServerList继承了com.netflix.loadbalancer.AbstractServerList,其getInitialListOfServers及getUpdatedListOfServers方法都是调用了getServers;getServers方法则是通过NamingService.selectInstances来获取服务实例信息

doc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • NacosRibbonClientConfiguration
  • NacosServerList
  • NacosServer
  • 小结
  • doc
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档