目 录CONTENT

文章目录

nacos-clinet简单应用

gsh456
2024-07-16 / 0 评论 / 0 点赞 / 33 阅读 / 0 字

在2022年的时候,我为项目组开发了一个运维组件,集成到系统里面,可以管理jar服务的启停,自动升级jar服务,执行sql增量脚本,领导感觉很好用。但是升级运维的工作变简单后,领导们感觉新服务的部署挺麻烦的,能不能搞一个一键部署nginx,nacos,redis,jdk的脚本,于是我又写了一个 一键安装的sh脚本,但是由于centos不维护了,服务器的操作系统版本变得复杂起来,这个sh脚本变得不通用起来,而且啊 linux的sh脚本需要基本的linux知识啊,让我做一个页面话的一键安装工具,目标类似宝塔,,,,,

本文 nacos-clinet 探坑

1. 依赖

首先是依赖

<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>2.2.2</version>
</dependency>

坑来了

由于Nacos Java SDK在2.0版本后引入了gRPC,为了避免用户业务引入的gRPC版本不同导致冲突,使用了shaded技术将部分依赖直接封装进nacos-client中,导致nacos-client较大。 如果用户未自行引入gRPC或确认版本无冲突,希望使用纯净版的nacos-client以减小依赖,可以使用classifier来指定使用纯净版。

于是我把依赖改为

 <properties>
        <!-- 2.1.2版本以上支持纯净版客户端 -->
        <nacos.version>2.2.2</nacos.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>${nacos.version}</version>
            <!-- 指定纯净版SDK -->
            <classifier>pure</classifier>
        </dependency>
        <!-- 使用纯净版时必须要引入同版本nacos-api和nacos-common,否则可能出现运行时找不到类的问题 -->
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-common</artifactId>
            <version>${nacos.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-api</artifactId>
            <version>${nacos.version}</version>
        </dependency>
    </dependencies>

然后发现,项目大了5M,,,,,,,纯净版一点也不纯净

发现引一个 nacos-cleint 项目大了15M,要不使用openApi,使用http请求得了,反正本人也不用几个接口,但是本着探坑的目的,大就大吧,起码兼容性好(有些现场使用的是nacosV1的版本,有些是nacosV2版本)

2.配置接口

因为新版nacos默认没有开启验证,因为客户的不专业,要求nacos必须开启验证,,,,所以密码是必须的

			Properties properties = new Properties();
			boolean needAuth = false;
            if (needAuth) {
				//需要认证
                properties.put(PropertyKeyConst.USERNAME,"nacos");
                properties.put(PropertyKeyConst.PASSWORD, "nacos");
            }
            properties.put(PropertyKeyConst.NAMESPACE, "public");
            properties.put(PropertyKeyConst.SERVER_ADDR, "http://127.0.0.1:8848");
            try {
                ConfigService configService= NacosFactory.createConfigService(properties);
				String content = configService.getConfig("服务id", "DEFAULT_GROUP", 5000);
            } catch (NacosException e) {
                throw new RuntimeException(e);
            }

3.服务相关接口

获取服务信息

 			//使用Properties 的方式可以自定义命名空间
            Properties properties = new Properties();
			//这个变量是默认的命名空间,下面那个没用,但是放着以防万一
            properties.put(PropertyKeyConst.SystemEnv.ALIBABA_ALIWARE_NAMESPACE, "public");
            properties.put(PropertyKeyConst.NAMESPACE, "public");
            properties.put(PropertyKeyConst.SERVER_ADDR,"http://127.0.0.1:8848");
			boolean needAuth = false;
            if (needAuth  == 1) {
                properties.put(PropertyKeyConst.USERNAME, "nacos");
                properties.put(PropertyKeyConst.PASSWORD, "nacos");
            }
            try {
                NamingService namingService = NamingFactory.createNamingService(properties);
				//List<Instance> allInstances  = naming.getAllInstances("服务名字",组名);
				List<Instance> allInstances  = naming.getAllInstances("服务名字");
            } catch (NacosException e) {
                throw new RuntimeException(e);
            }

获取所有服务

			//使用Properties 的方式可以自定义命名空间
            Properties properties = new Properties();
			//这个变量是默认的命名空间,下面那个没用,但是放着以防万一
            properties.put(PropertyKeyConst.SystemEnv.ALIBABA_ALIWARE_NAMESPACE, "public");
            properties.put(PropertyKeyConst.NAMESPACE, "public");
            properties.put(PropertyKeyConst.SERVER_ADDR,"http://127.0.0.1:8848");
			boolean needAuth = false;
            if (needAuth  == 1) {
                properties.put(PropertyKeyConst.USERNAME, "nacos");
                properties.put(PropertyKeyConst.PASSWORD, "nacos");
            }
			List<Instance> allInstances = new ArrayList<>();
            try {
                NamingService namingService = NamingFactory.createNamingService(properties);
				//查询所有服务
				ListView<String> servicesOfServer = namingService.getServicesOfServer(1, 100);
				List<String> data = servicesOfServer.getData();
				//根据所有服务的名字查询服务信息
	            for (String serviceNameTemp : data) {
	                allInstances.addAll(naming.getAllInstances(serviceNameTemp));
	            }
            } catch (NacosException e) {
                throw new RuntimeException(e);
            } 			
			
           

这里只是简单示例,完整代码就不放出来献丑了

0

评论区