
1.通过java-sdk的方式发布配置官方文档说明https://nacos.io/zh-cn/docs/sdk.htmlhttps://nacos.io/zh-cn/docs/open-api.html1.1构造ConfigService工具类package com.redxun.config; import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.exception.NacosException; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; /** * 构造ConfigService工具类。 */ Configuration public class NacosConfigConfigration implements EnvironmentAware { private Environment env; private static final String NACOS_ADDRESSnacos.address; private static final String NACOS_NAMESPACEnacos.namespace; private static final String NACOS_USERNAMEnacos.username; private static final String NACOS_PASSWORDnacos.password; Override public void setEnvironment(Environment environment) { this.envenvironment; } Bean public ConfigService configService() throws NacosException { NacosConfigService configServicenew NacosConfigService(); String addressthis.env.getProperty(NACOS_ADDRESS); String namespacethis.env.getProperty(NACOS_NAMESPACE); String usernamethis.env.getProperty(NACOS_USERNAME); String passwordthis.env.getProperty(NACOS_PASSWORD); ConfigService service configService.getConfigService(address,namespace,username,password); return service; } }1.2构造NacosConfig配置package com.redxun.config; import com.alibaba.nacos.api.NacosFactory; import com.alibaba.nacos.api.PropertyKeyConst; import com.alibaba.nacos.api.annotation.NacosInjected; import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.exception.NacosException; import org.springframework.util.StringUtils; import java.util.Properties; /** * 构造NacosConfig配置。 */ public class NacosConfigService { public ConfigService getConfigService(String address,String namespace,String username,String password) throws NacosException { if(StringUtils.isEmpty(address)){ addresslocalhost:8848; } if(StringUtils.isEmpty(namespace)){ namespacelocal; } if(StringUtils.isEmpty(username)){ usernamenacos; } if(StringUtils.isEmpty(password)){ passwordnacos; } Properties properties new Properties(); // nacos服务器地址 properties.put(PropertyKeyConst.SERVER_ADDR, address); // 配置中心的命名空间id properties.put(PropertyKeyConst.NAMESPACE, namespace); properties.put(PropertyKeyConst.USERNAME, username); properties.put(PropertyKeyConst.PASSWORD, password); ConfigService configService NacosFactory.createConfigService(properties); return configService; } }1.3获取配置、修改后、发布配置获取配置String config configService.getConfig(dataId, groupId, 0L);发布配置configService.publishConfig(dataId, groupId, conf.toJSONString());/** * 更新限流规则 * * param entity * return */ Transactional(rollbackFor Exception.class) public int update(SysInterfaceApiFlow entity) { try { NamingService nacosNamingService nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties()); ListInstance instances nacosNamingService.getAllInstances(serviceName); //查询nacos上面的限流配置 String config configService.getConfig(dataId, groupId, 0L); if (StringUtils.isEmpty(config)) { config []; } JSONArray conf JSONArray.parseArray(config); //把当前的实体类转化为nacos限流配置 if (null ! entity) { JSONObject json buildFlowJson(entity); Iterator iterator conf.iterator(); while (iterator.hasNext()) { Map map (Map) iterator.next(); if (map.get(id).equals(json.get(id))) { iterator.remove();//删除id相同的配置项 } } //删除之后再新增当前配置项 conf.add(json); } //发布全部的限流配置 int result sysInterfaceApiFlowMapper.updateById(entity); if (result 0) { configService.publishConfig(dataId, groupId, conf.toJSONString()); } return result; } catch (NacosException e) { log.error(添加限流规则出错 e.getMessage()); throw new BusinessException(添加限流规则出错 e.getMessage()); } }2.获取nacos上面的微服务列表、详情包括集群详情2.1通过api的方式获取列表sdk和open-api方式没有分页和条件查询参数2.1.1先获取token/** * nacos获取accessToken * * return * throws Exception */ private String getAccessToken()throws Exception{Map mapnew HashMap();map.put(username, username);map.put(password, password);String resultHttpClientUtil.postFromUrl(http:// address /nacos/v1/auth/login, map);JSONObject jsonObjectJSONObject.parseObject(result);String accessTokenjsonObject.getString(accessToken);returnaccessToken;}2.1.2分页获取服务列表/** * nacos获取service * * return */ private String getNacosService(String accessToken, String serviceName, String groupName, long current, long size)throws Exception{Map mapServicenew HashMap();mapService.put(accessToken, accessToken);mapService.put(hasIpCount,true);mapService.put(withInstances,false);mapService.put(serviceNameParam, serviceName);mapService.put(clusterName,DEFAULT);mapService.put(groupNameParam, groupName);mapService.put(pageSize, String.valueOf(size));mapService.put(pageNo, String.valueOf(current));mapService.put(namespaceId, namespace);String serviceResultHttpClientUtil.getFromUrl(http:// address /nacos/v1/ns/catalog/services, mapService);returnserviceResult;}2.1.3分页获取实例列表/** * nacos获取instances * * param accessToken * param serviceName * param current * param size * return * throws Exception */ private String getInsResult(String accessToken, String serviceName, long current, long size)throws Exception{Map mapInsnew HashMap();mapIns.put(accessToken, accessToken);mapIns.put(serviceName, serviceName);mapIns.put(clusterName,DEFAULT);mapIns.put(groupName,DEFAULT_GROUP);mapIns.put(pageSize, String.valueOf(size));mapIns.put(pageNo, String.valueOf(current));mapIns.put(namespaceId, namespace);String insResultHttpClientUtil.getFromUrl(http:// address /nacos/v1/ns/catalog/instances, mapIns);returninsResult;}2.2通过java-sdk获取没有分页参数、弃用NamingService nacosNamingServicenacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());NamingMaintainService namingMaintainServicenacosServiceManager.getNamingMaintainService(nacosDiscoveryProperties.getNacosProperties());ListServiceInfoserviceInfosnacosNamingService.getSubscribeServices();ListInstanceinstancesnacosNamingService.getAllInstances(serviceName);3.修改实例权重、上下线等java-sdk方式/** * 对服务进行加权降权处理 * * return * throws Exception */ MethodDefine(title对服务进行加权降权处理, path/updateInstance, methodHttpMethodConstants.POST)ApiOperation(value对服务进行加权降权处理, notes对服务进行加权降权处理)PostMapping(value/updateInstance)public JsonResult updateInstance(RequestBody Instance instance, String type, String serviceName)throws Exception{JsonResult jsonResultJsonResult.getSuccessResult(操作成功!);try{NamingMaintainService namingMaintainServicenacosServiceManager.getNamingMaintainService(nacosDiscoveryProperties.getNacosProperties());double weightinstance.getWeight();if(StringUtils.isNotEmpty(type)type.equals(0)){//加权 weight;}elseif(StringUtils.isNotEmpty(type)type.equals(1)){//降权 weight--;}elseif(StringUtils.isNotEmpty(type)type.equals(2)){//下线 instance.setEnabled(false);}elseif(StringUtils.isNotEmpty(type)type.equals(3)){//上线 instance.setEnabled(true);}instance.setWeight(weight);namingMaintainService.updateInstance(serviceName, instance);}catch(Exception ex){jsonResult.setSuccess(false);}returnjsonResult;}