iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >springboot获取nacos的服务列表、实例列表及修改实例、发布配置等
  • 883
分享到

springboot获取nacos的服务列表、实例列表及修改实例、发布配置等

springbootnacosjava-sdkopen-api 2023-08-16 15:08:42 883人浏览 安东尼
摘要

1.通过java-sdk的方式发布配置 官方文档说明:https://Nacos.io/zh-cn/docs/sdk.html Https://nacos.io/zh-cn/docs/open-api.html 1.1构造ConfigSer

1.通过java-sdk的方式发布配置

官方文档说明:https://Nacos.io/zh-cn/docs/sdk.html
Https://nacos.io/zh-cn/docs/open-api.html

1.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;@Configurationpublic 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;    }}

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;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;    }}

1.3获取配置、修改后、发布配置

获取配置:String config = configService.getConfig(dataid, groupId, 0L);

发布配置:configService.publishConfig(dataId, groupId, conf.toJSONString());

@Transactional(rollbackFor = Exception.class)public int update(SysInterfaceApiFlow entity) {    try {        NamingService nacosNamingService = nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());        List 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

 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; }

2.1.2分页获取服务列表

 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; }

2.1.3分页获取实例列表

 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; }

2.2通过java-sdk获取(没有分页参数、弃用)

NamingService nacosNamingService = nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());NamingMaintainService namingMaintainService = nacosServiceManager.getNamingMaintainService(nacosDiscoveryProperties.getNacosProperties());List serviceInfos = nacosNamingService.getSubscribeServices();List instances = nacosNamingService.getAllInstances("serviceName");

3.修改实例权重、上下线等(java-sdk方式)

 @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; }

来源地址:https://blog.csdn.net/qq_29467891/article/details/129850623

--结束END--

本文标题: springboot获取nacos的服务列表、实例列表及修改实例、发布配置等

本文链接: https://www.lsjlt.com/news/371483.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作