Nacos指南-服务发现:修改实例

x33g5p2x  于2021-12-20 转载在 其他  
字(1.5k)|赞(0)|评价(0)|浏览(221)

API

描述

修改服务下的一个实例。

请求类型

PUT

请求路径

/nacos/v1/ns/instance

请求参数

名称类型是否必选描述
serviceName字符串服务名
ip字符串服务实例IP
portint服务实例port
groupName字符串分组名
clusterName字符串集群名称
namespaceId字符串命名空间ID
weightdouble权重
metadataJSON扩展信息
enabledboolean是否打开流量
ephemeralboolean是否临时实例

错误编码

错误代码描述语义
400Bad Request客户端请求中的语法错误
403Forbidden没有权限
404Not Found无法找到资源
500Internal Server Error服务器内部错误
200OK正常

示例请求

curl -X PUT '127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.test.1&ip=1.1.1.1&port=8888&clusterName=TEST1&weight=8&metadata={}'

示例返回

ok

关键流程源码解析

InstanceController

/** * Update instance. * 更新实例 * @param request http request * @return 'ok' if success * @throws Exception any error during update */
    @CanDistro
    @PutMapping
    @Secured(parser = NamingResourceParser.class, action = ActionTypes.WRITE)
    public String update(HttpServletRequest request) throws Exception {
        final String namespaceId = WebUtils
                .optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID);
        final String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME);
        NamingUtils.checkServiceNameFormat(serviceName);
        final Instance instance = parseInstance(request);
		
        String agent = WebUtils.getUserAgent(request);
		//构建请求参数为客户端信息
        ClientInfo clientInfo = new ClientInfo(agent);
		//客户端信息为JAVA并且版本号>=1.0.0的更新实例,否则注册实例
        if (clientInfo.type == ClientInfo.ClientType.JAVA
                && clientInfo.version.compareTo(VersionUtil.parseVersion("1.0.0")) >= 0) {
            serviceManager.updateInstance(namespaceId, serviceName, instance);
        } else {
            serviceManager.registerInstance(namespaceId, serviceName, instance);
        }
        return "ok";
    }

总结

修改实例最后还是走到了注册实例方法中

相关文章