首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊聊nacos address的getCluster

聊聊nacos address的getCluster

作者头像
code4it
发布于 2019-10-31 14:22:08
发布于 2019-10-31 14:22:08
46400
代码可运行
举报
文章被收录于专栏:码匠的流水账码匠的流水账
运行总次数:0
代码可运行

本文主要研究一下nacos address的getCluster

ServerListController

nacos-1.1.3/address/src/main/java/com/alibaba/nacos/address/controller/ServerListController.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
public class ServerListController {

    @Autowired
    private ServiceManager serviceManager;

    @Autowired
    private AddressServerGeneratorManager addressServerBuilderManager;

    /**
     * @param product will get Ip list of that products to be associated
     * @param cluster will get Ip list of that product cluster to be associated
     * @return
     */
    @RequestMapping(value = "/{product}/{cluster}", method = RequestMethod.GET)
    public ResponseEntity getCluster(@PathVariable String product,
                                     @PathVariable String cluster) {

        String productName = addressServerBuilderManager.generateProductName(product);
        String serviceName = addressServerBuilderManager.generateNacosServiceName(productName);
        Service service = serviceManager.getService(Constants.DEFAULT_NAMESPACE_ID, serviceName);
        if (service == null) {

            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("product=" + product + " not found.");
        }

        if (!service.getClusterMap().containsKey(cluster)) {

            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("product=" + product + ",cluster=" + cluster + " not found.");
        }

        Cluster clusterObj = service.getClusterMap().get(cluster);
        return ResponseEntity.status(HttpStatus.OK).body(addressServerBuilderManager.generateResponseIps(clusterObj.allIPs(false)));
    }
}
  • getCluster方法首先通过addressServerBuilderManager.generateProductName(product)获取productName,通过addressServerBuilderManager.generateNacosServiceName(productName)获取serviceName
  • 然后通过serviceManager.getService(Constants.DEFAULT_NAMESPACE_ID, serviceName)获取service,之后判断service.getClusterMap()是否包含cluster,不包含返回404
  • 最后通过service.getClusterMap().get(cluster)获取cluster,然后通过addressServerBuilderManager.generateResponseIps(clusterObj.allIPs(false))返回结果

AddressServerGeneratorManager

nacos-1.1.3/address/src/main/java/com/alibaba/nacos/address/component/AddressServerGeneratorManager.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
public class AddressServerGeneratorManager {

    public String generateProductName(String name) {

        if (StringUtils.isBlank(name) || AddressServerConstants.DEFAULT_PRODUCT.equals(name)) {

            return AddressServerConstants.ALIWARE_NACOS_DEFAULT_PRODUCT_NAME;
        }

        return String.format(AddressServerConstants.ALIWARE_NACOS_PRODUCT_DOM_TEMPLATE, name);
    }

    public String generateNacosServiceName(String rawServiceName) {

        if (rawServiceName.indexOf(Constants.DEFAULT_GROUP) != -1) {
            return rawServiceName;
        }

        return Constants.DEFAULT_GROUP + AddressServerConstants.GROUP_SERVICE_NAME_SEP + rawServiceName;
    }

    public String generateResponseIps(List<Instance> instanceList) {

        StringBuilder ips = new StringBuilder();
        instanceList.forEach(instance -> {
            ips.append(instance.getIp() + ":" + instance.getPort());
            ips.append("\n");
        });

        return ips.toString();
    }

    //......
}
  • generateProductName方法对于name为空或者是nacos的,返回nacos.as.default,否则返回nacos.as.前缀加name;generateNacosServiceName会返回DEFAULT_GROUP@@加rawServiceName,默认rawServiceName是不包含DEFAULT_GROUP的;generateResponseIps方法将instanceList转为ip及port并用换行拼接的string

小结

  • getCluster方法首先通过addressServerBuilderManager.generateProductName(product)获取productName,通过addressServerBuilderManager.generateNacosServiceName(productName)获取serviceName
  • 然后通过serviceManager.getService(Constants.DEFAULT_NAMESPACE_ID, serviceName)获取service,之后判断service.getClusterMap()是否包含cluster,不包含返回404
  • 最后通过service.getClusterMap().get(cluster)获取cluster,然后通过addressServerBuilderManager.generateResponseIps(clusterObj.allIPs(false))返回结果

doc

  • ServerListController
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码匠的流水账 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊聊nacos address的deleteCluster
nacos-1.1.3/address/src/main/java/com/alibaba/nacos/address/controller/AddressServerClusterController.java
code4it
2019/10/27
4360
聊聊nacos address的deleteCluster
聊聊nacos address的postCluster
nacos-1.1.3/address/src/main/java/com/alibaba/nacos/address/controller/AddressServerClusterController.java
code4it
2019/10/26
4600
聊聊nacos address的postCluster
聊聊nacos ServiceManager的removeInstance
本文主要研究一下nacos ServiceManager的removeInstance
code4it
2019/09/13
4060
聊聊nacos ServiceManager的removeInstance
聊聊nacos ServiceManager的registerInstance
本文主要研究一下nacos ServiceManager的registerInstance
code4it
2019/09/12
9270
聊聊nacos ServiceManager的registerInstance
【Nacos源码系列】Nacos心跳机制原理
心跳机制是一种用于监测和管理微服务可用性的机制,它用来维护注册中心和服务提供者之间的连接状态,并及时更新服务实例的状态信息。
索码理
2023/08/21
1.6K0
【Nacos源码系列】Nacos心跳机制原理
Nacos(二)源码分析Nacos服务端注册示例流程
上回我们讲解了客户端配置好nacos后,是如何进行注册到服务器的,那我们今天来讲解一下服务器端接收到注册实例请求后会做怎么样的处理。
努力的小雨
2024/06/13
3850
聊聊nacos ServiceManager的UpdatedServiceProcessor
本文主要研究一下nacos ServiceManager的UpdatedServiceProcessor
code4it
2019/09/15
5740
聊聊nacos ServiceManager的UpdatedServiceProcessor
详解nacos注册中心服务注册流程
说起注册中心,我们首先要知道注册中心是用来做什么的,注册中心一般都是用在微服务架构中,而微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信通常采用HTTP的方式,这些服务共用一个最小型的集中式的管理。这个最小型的集中式管理的组件就是服务注册中心。
架构之家
2022/07/12
4.8K0
详解nacos注册中心服务注册流程
聊聊nacos的MysqlHealthCheckProcessor
nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/MysqlHealthCheckProcessor.java
code4it
2019/09/21
3890
聊聊nacos的MysqlHealthCheckProcessor
聊聊nacos的HttpHealthCheckProcessor
nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckProcessor.java
code4it
2019/09/19
8960
聊聊nacos的HttpHealthCheckProcessor
聊聊nacos的TcpSuperSenseProcessor
nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/TcpSuperSenseProcessor.java
code4it
2019/09/20
3410
聊聊nacos的TcpSuperSenseProcessor
聊聊nacos Service的processClientBeat
nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java
code4it
2019/09/17
6940
聊聊nacos Service的processClientBeat
聊聊NacosNamingService的selectInstances
本文主要研究一下NacosNamingService的selectInstances
code4it
2019/10/09
6230
聊聊nacos ServiceManager的updateInstance
本文主要研究一下nacos ServiceManager的updateInstance
code4it
2019/09/14
6630
聊聊nacos ServiceManager的updateInstance
聊聊nacos的DistroConsistencyServiceImpl
本文主要研究一下nacos的DistroConsistencyServiceImpl
code4it
2019/09/10
4820
聊聊nacos的DistroConsistencyServiceImpl
微服务:剖析一下源码,Nacos的健康检查竟如此简单
前面我们多次提到Nacos的健康检查,比如《微服务之:服务挂的太干脆,Nacos还没反应过来,怎么办?》一文中还对健康检查进行了自定义调优。那么,Nacos的健康检查和心跳机制到底是如何实现的呢?在项目实践中是否又可以参考Nacos的健康检查机制,运用于其他地方呢?
程序新视界
2021/12/07
1.5K0
聊聊NacosNamingService的deregisterInstance
本文主要研究一下NacosNamingService的deregisterInstance
code4it
2019/10/07
6600
聊聊NacosNamingService的deregisterInstance
聊聊nacos的HealthCheckCommon
nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckCommon.java
code4it
2019/09/22
5880
聊聊nacos的HealthCheckCommon
微服务组件-----Spring Cloud Alibaba 注册中心 Nacos源码(1.4.x版本)分析
【1】服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。
忧愁的chafry
2022/10/30
1.2K0
微服务组件-----Spring Cloud Alibaba 注册中心 Nacos源码(1.4.x版本)分析
Nacos 服务注册源码分析
本文我们一起以源码的维度来分析 Nacos 做为服务注册中心的服务注册过程,我会以服务端、客户端两个角度来进行分析,Nacos 客户端我主要是采用 spring-cloud-alibaba 作为核心的客户端组件。对于 Nacos 服务端我会讲解到, Nacos 如何实现 AP/CP 两种模式共存的,以及如何区分的。最后还会分享我在源码调试过程中如何定位核心类的一点经验。
没有故事的陈师傅
2021/07/21
9730
推荐阅读
相关推荐
聊聊nacos address的deleteCluster
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验