官方文档说明:https://nacos.io/zh-cn/docs/sdk.html
https://nacos.io/zh-cn/docs/open-api.html
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_ADDRESS="nacos.address"; private static final String NACOS_NAMESPACE="nacos.namespace"; private static final String NACOS_USERNAME="nacos.username"; private static final String NACOS_PASSWORD="nacos.password"; @Override public void setEnvironment(Environment environment) { this.env=environment; } @Bean public ConfigService configService() throws NacosException { NacosConfigService configService=new NacosConfigService(); String address=this.env.getProperty(NACOS_ADDRESS); String namespace=this.env.getProperty(NACOS_NAMESPACE); String username=this.env.getProperty(NACOS_USERNAME); String password=this.env.getProperty(NACOS_PASSWORD); ConfigService service= configService.getConfigService(address,namespace,username,password); return service; } }
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)){ address="localhost:8848"; } if(StringUtils.isEmpty(namespace)){ namespace="local"; } if(StringUtils.isEmpty(username)){ username="nacos"; } if(StringUtils.isEmpty(password)){ password="nacos"; } 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; } }
获取配置: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()); Listinstances = 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()); } }
/** * nacos获取accessToken * * @return * @throws Exception */ private String getAccessToken() throws Exception { Map map = new HashMap<>(); map.put("username", username); map.put("password", password); String result = HttpClientUtil.postFromUrl("http://" + address + "/nacos/v1/auth/login", map); JSONObject jsonObject = JSONObject.parseObject(result); String accessToken = jsonObject.getString("accessToken"); return accessToken; }
/** * nacos获取service * * @return */ private String getNacosService(String accessToken, String serviceName, String groupName, long current, long size) throws Exception { Map mapService = new 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 serviceResult = HttpClientUtil.getFromUrl("http://" + address + "/nacos/v1/ns/catalog/services", mapService); return serviceResult; }
/** * 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 mapIns = new 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 insResult = HttpClientUtil.getFromUrl("http://" + address + "/nacos/v1/ns/catalog/instances", mapIns); return insResult; }
NamingService nacosNamingService = nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties()); NamingMaintainService namingMaintainService = nacosServiceManager.getNamingMaintainService(nacosDiscoveryProperties.getNacosProperties()); ListserviceInfos = nacosNamingService.getSubscribeServices(); List instances = nacosNamingService.getAllInstances("serviceName");
/** * 对服务进行加权降权处理 * * @return * @throws Exception */ @MethodDefine(title = "对服务进行加权降权处理", path = "/updateInstance", method = HttpMethodConstants.POST) @ApiOperation(value = "对服务进行加权降权处理", notes = "对服务进行加权降权处理") @PostMapping(value = "/updateInstance") public JsonResult updateInstance(@RequestBody Instance instance, String type, String serviceName) throws Exception { JsonResult jsonResult = JsonResult.getSuccessResult("操作成功!"); try { NamingMaintainService namingMaintainService = nacosServiceManager.getNamingMaintainService(nacosDiscoveryProperties.getNacosProperties()); double weight = instance.getWeight(); if (StringUtils.isNotEmpty(type) && type.equals("0")) {//加权 weight++; } else if (StringUtils.isNotEmpty(type) && type.equals("1")) {//降权 weight--; } else if (StringUtils.isNotEmpty(type) && type.equals("2")) {//下线 instance.setEnabled(false); } else if (StringUtils.isNotEmpty(type) && type.equals("3")) {//上线 instance.setEnabled(true); } instance.setWeight(weight); namingMaintainService.updateInstance(serviceName, instance); } catch (Exception ex) { jsonResult.setSuccess(false); } return jsonResult; }