Nacos入门到精通

简介: 本文详细介绍了Nacos的基本概念、安装过程、配置管理功能,并通过具体代码示例展示了如何使用Java SDK和Spring Boot拉取和监听Nacos中的配置信息。

Nacos概述

    全称Dynamic Naming and Configuration Service,是一个Nacos,全称Dynamic Naming and Configuration Service,是一个易于构建云原生应用的动态服务发现、配置管理和服务管理平台。其核心功能主要包括服务发现、健康检查、动态配置服务和动态DNS服务等。这些特性使得微服务的发现、管理、共享和组合更加容易。

   具体来说,Nacos支持基于DNS和RPC的服务发现,可以实时检查服务的健康状态,实现动态配置服务,并提供了动态DNS服务等特性。此外,Nacos还与Spring Cloud Alibaba紧密集成,可以作为注册中心,实现服务的注册与发现。

官网Releases · alibaba/nacos (github.com)

第一步:安装Nacos

这里,我就用Windows版本。

解压缩即可。

当然nacos也是用java写的,我们也可以直接运行这个jar包

是不是特别像springboot的配置文件。

第二步:启动nacos

startup.cmd -m standalone

当然,我这个是改了端口号的,我改回去即可。

正常运行(没改的情况下)的是8848端口号。

启动成功。访问Nacos http://localhost:8848/nacos/#/login

默认用户名和密码都是nacos

第三步:配置管理

新建配置

然后发布即可

JavaSdk拉取配置

第一步:新建项目

pom文件

 <dependencies>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.sitebricks</groupId>
            <artifactId>slf4j</artifactId>
            <version>0.8.3</version>
        </dependency>
    </dependencies>

第二步:编写代码

package org.cyl;

import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;

import java.util.Properties;

public class Main {
    public static void main(String[] args) {
        try {
            String serverAddr="localhost:8848";
            String dataId="test";
            String group="DEFAULT_GROUP";
            Properties properties=new Properties();
            properties.put("serverAddr",serverAddr);
            ConfigService configService = NacosFactory.createConfigService(properties);
            String config = configService.getConfig(dataId, group, 5000);
            System.out.println(config);
        } catch (NacosException e) {
            throw new RuntimeException(e);
        }
    }
}

第三步:运行结果

JavaSdk监听配置

第一步:编写代码

package org.cyl;

import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;

import java.io.IOException;
import java.util.Properties;
import java.util.concurrent.Executor;

public class Main {
    public static void main(String[] args) {
        try {
            String serverAddr="localhost:8848";
            String dataId="test";
            String group="DEFAULT_GROUP";
            Properties properties=new Properties();
            properties.put("serverAddr",serverAddr);
            ConfigService configService = NacosFactory.createConfigService(properties);
            String config = configService.getConfig(dataId, group, 5000);
            System.out.println(config);


            configService.addListener(dataId, group, new Listener() {
                @Override
                public Executor getExecutor() {
                    return null;
                }

                @Override
                public void receiveConfigInfo(String s) {
                    System.out.println(s);
                }
            });
            System.in.read();
        } catch (NacosException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

第二步:运行项目并修改nacos配置文件

之后看结果,已经监测到了:

Spring拉取配置

第一步:创建项目

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.cyl</groupId>
    <artifactId>test07</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.6.13</version>
        </dependency>

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                <version>2022.0.0.0-RC2</version>
            </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.6.13</version>
        </dependency>
        <dependency>
            <groupId>com.google.sitebricks</groupId>
            <artifactId>slf4j</artifactId>
            <version>0.8.3</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-spring-context</artifactId>
            <version>1.1.1</version>
        </dependency>
    </dependencies>

</project>

MyApplication类

package org.cyl;

import com.alibaba.nacos.api.annotation.NacosProperties;
import com.alibaba.nacos.spring.context.annotation.config.EnableNacosConfig;
import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
import org.cyl.service.MyService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@ComponentScan
@Configuration
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))
@NacosPropertySource(dataId = "test",autoRefreshed = true)
public class MyApplication {


    public static void main(String[] args) {
        AnnotationConfigApplicationContext annotationConfigApplicationContext=new AnnotationConfigApplicationContext(MyApplication.class);
        MyService myService = annotationConfigApplicationContext.getBean(MyService.class);
        myService.test();
    }
}

MyService类

package org.cyl.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class MyService {
    @Value("${password}")
    public String username;
    public void test(){
        System.out.println(username);
    }
}

第二步:查看运行结果

Springboot拉取配置

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.cyl</groupId>
    <artifactId>test07</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.6.13</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.6.13</version>
        </dependency>
        <dependency>
            <groupId>com.google.sitebricks</groupId>
            <artifactId>slf4j</artifactId>
            <version>0.8.3</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
            <version>0.2.12</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.15.3</version>
        </dependency>
    </dependencies>

</project>

MyApplication类

package org.cyl;
import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
@NacosPropertySource(dataId = "test",autoRefreshed = true)
public class MyApplication {


    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class,args);
    }
}

application.properties

nacos.config.server-addr=127.0.0.1:8848

注意:如果想要全部写在properties里面应该这样写:

nacos.config.server-addr=127.0.0.1:8848
nacos.config.data-id=test
nacos.config.auto-refresh=true
nacos.config.bootstrap.enable=true

Controller

package org.cyl.controller;

import com.alibaba.nacos.api.config.annotation.NacosValue;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @NacosValue(value = "${password}",autoRefreshed = true)
    public String password;

    @GetMapping("/")
    public String test(){
        return password;
    }
}

第二步:运行结果,查看

SpringCloud拉取项目

注意:有的版本是会直接读取bootstrap.properties里面

算了,我还是直接写一个微服务系列吧

目录
相关文章
|
SpringCloudAlibaba 监控 Java
三.SpringCloudAlibaba极简入门-配置中心Nacos
在《SpringCloud极简入门》中我们通过[Spring Cloud Config](https://blog.csdn.net/u014494148/article/details/105159730)作为统一配置文件管理中心,其实我们总结一下发现Spring Cloud Config使用起来总归比较麻烦。Nacos作为Spring Cloud Alibaba的一个重要组件,它不仅可以用作服务注册与发现,也可以用来替代Spring Cloud Config作为统一配置文件管理,而且他的使用更为简单和人性化。
|
2月前
|
存储 算法 Java
Nacos学习圣经:从入门到精通 Nacos,最全详解
本文,就是 Nacos 学习圣经,帮助大家彻底掌握 阿里 的核心组件, nacos 。 Nacos学习圣经 正式版本会有更新, 。
Nacos学习圣经:从入门到精通 Nacos,最全详解
|
7月前
|
Cloud Native Java Nacos
Nacos 1.4.1核心功能组件及使用入门
以上步骤提供了 Nacos 1.4.1 的基本使用概览,具体的配置和使用可能根据你的环境和需求有所不同。
219 6
|
7月前
|
Java Nacos 数据格式
Nacos 入门实战
Nacos 入门实战
53 0
|
SpringCloudAlibaba 负载均衡 监控
十五.SpringCloudAlibaba极简入门-Gateway网关整合Nacos
这一篇文章算是补充把,之前的Spring Cloud Gateway 是以Eureka为注册中心进行整合的,见《服务网关Gateway》,现在讲一下Spring Cloud Gateway 和Nacos的整合,该文章只介绍了Gateway和Nacos整合部分,请结合《服务网关Gateway》一起看你的收获会更大
|
存储 Java 关系型数据库
四.SpringCloudAlibaba极简入门-Nacos持久化与集群
在《Spring Cloud极简入门》应用架构演变一文中我们有提到,我们可以通过集群手段来实现来提高应用的作业能力,防止单节点故障。在之前的Nacos案例中我们玩的都是单机版的, 本片文章我们来探讨一下Nacos的集群部署。 在Nacos中数据默认是基于内存存储的,当Nacos重启数据(服务列表,配置列表)将会丢失,在Nacos中支持将数据持久到数据库。那么当我们对Nacos做了集群部署之后,多个Nacos节点之间是需要数据同步(数据共享)的,而正好Nacos节点之间的数据同步也是基于数据库来实现。所以我们要多Nacos做集群操作得向对Nacos做数据持久化。 这里我演示的是在centos
|
SpringCloudAlibaba 负载均衡 监控
SpringCloudAlibaba极简入门-Gateway网关整合Nacos
Zuul是Netflix的开源项目,Spring Cloud将其收纳成为自己的一个子组件。zuul用的是多线程阻塞模型,它本质上就是一个同步 Servlet,这样的模型比较简单,他都问题是多线程之间上下文切换是有开销的,线程越多开销就越大。线程池数量固定意味着能力接受的请求数固定,当后台请求变慢,面对大量的请求,线程池中的线程容易被耗尽,后续的请求会被拒绝。 在Zuul 2.0中它采用了 Netty 实现异步非阻塞编程模型,异步非阻塞模式对线程的消耗比较少,对线程上线文切换的消耗也比较小,并且可以接受更多的请求。它的问题就是线程模型比较复杂,要求深究底层原理需要花一些功夫。
111 0
|
SpringCloudAlibaba 安全 算法
五.SpringCloudAlibaba极简入门-修改Nacos控制台密码
Nacos的控制台登录账号是nacos/nacos , 在生产环境中一定需要修改密码,不然一旦服务器地址泄露Nacos就会变得不安全,后果不堪设想。在上一章节我们做Nacos集群时我们基于MySql做了Nacos的数据持久化。在Nacos的数据库中有一个user表 , 这个表就是用来记录Nacos的控制台登录账号的,我们只需要修改表中的password 字段的 值即可。如下
|
负载均衡 Cloud Native Dubbo
二.SpringCloudAlibaba极简入门-服务注册与发现Nacos
在《Spring Cloud 极简入门》中我们学习了netflix 的 Eureka 组件作为微服务的服务发现。Nacos和Eureka有着相同的能力,甚至更为强大,作为Dubbo 生态系统中重要的注册中心实现。官方对它有如下定义: Nacos致力于帮助您发现,配置和管理微服务。它提供了一组简单有用的功能,使您能够实现动态服务发现,服务配置,服务元数据和流量管理。 Nacos使构建,交付和管理微服务平台变得更容易,更快捷。它是通过微服务或云原生方法支持以服务为中心的现代应用程序体系结构的基础架构。 这里我们看到Nacos不仅是服务发现组件,同时也是一个配置管理组件,也就是说它不仅可以用来取
|
Java Nacos 数据安全/隐私保护
都2023了,为什么选择Nacos,这篇文章让你入门Nacos
2023了,为什么选择Nacos,这篇文章让你入门Nacos.Nacos算是阿里的巅峰之作了 , 集万千优点与一身, 比Eureka更便捷,更优秀,更完美而且Nacos的社区非常的活跃因为它使用简单,易操作,易上手而且比Eureka有着更加优秀的控制台界面.下面来简单认识一下今天的主角Nacos吧
230 0