nacos从入门到上手

什么是 Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施

Nacos 文档

Nacos Spring 快速开始

一、安装搭建

1、下载nacos2.0.4版本。(官方下载地址:Release 2.0.4 (Jan 18, 2022) · alibaba/nacos · GitHub

2、编辑配置文件nacos/conf/application.properties将端口修改为7001,默认端口为8848,也可以不改。

3、nacos 默认使用的是内置 MySQL,也可以使用独立 MySQL 数据库,如果使用独立数据库,执行nacos提供的脚本/nacos/conf/nacos-mysql.sql。

4、如果是使用独立数据库,则再修改配置文件/nacos/conf/application.properties,将数据源信息修改为自己的数据库地址。将下面参数修改为自己数据库参数。

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=12345678

5、在nacos的bin目录执行startup.cmd -m standalone,切记要加-m standalone,意思为以单机版模式启动,否则会报“Unable to start web server,Unable to start embedded Tomcat”。这是因为我们本地学习一般都是单机,只有一个nacos,所以只能以单机模式启动。

6、访问http://localhost:7001/nacos/,默认用户名密码:nacos/nacos

因为配置文件中server.servlet.contextPath=/nacos加了nacos,所以访问地址也需要加上nacos。

二、Java SDK拉取配置及监听配置

        该拉取方式类型我们刚开始学写代码的时候写的helloWord,下面通过demo进行获取nacos配置文件的参数。

1、在左边列表配置管理的配置列表,点击右上角+

 2、填写dataId和group并选择想要的配置文件格式后,输入自己想要配置的内容,如下:

3、填写完成后,点击右下角发布按钮即可。 

        

 4、新建springboot项目并引进下面的配置

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

4.1、新建测试类,进行拉取配置测试

public static void main(String[] args) {
    // 拉取nacos配置信息
    try {
        String serverAddr = "http://localhost:7001";
        String dateId = "test1";
        String group = "DEFAULT_GROUP";
        Properties properties = new Properties();
        properties.put("serverAddr", serverAddr);
        ConfigService configService = NacosFactory.createConfigService(properties);

        System.out.println("************************** 打印配置文件的参数 ****************************");
        String content = configService.getConfig(dateId, group, 5000);
        System.out.println(content);
    } catch (NacosException e) {
        e.printStackTrace();
    }
}

4.2、监听配置测试

public static void main(String[] args) {
    // 拉取nacos配置信息
    try {
        String serverAddr = "http://localhost:7001";
        String dateId = "test1";
        String group = "DEFAULT_GROUP";
        Properties properties = new Properties();
        properties.put("serverAddr", serverAddr);
        ConfigService configService = NacosFactory.createConfigService(properties);
        System.out.println("************************** 监听配置文件参数改变 ****************************");
        configService.addListener(dateId, group, new Listener() {
            @Override
            public Executor getExecutor() {
                return null;
            }

            @Override
            public void receiveConfigInfo(String s) {
                System.out.println(s);
            }
        });
        // 设置输入,防止main方法结束,测试修改配置后是否可以监听得到。
        System.in.read();
    } catch (NacosException | IOException e) {
        e.printStackTrace();
    }
}

运行后去nacos配置那里进行编辑(将7001改为7002)后重新发布,控制台就能看到改变后打印的数据。

三、Spring拉取配置

        main方法,通过AnnotationConfigApplicationContext获取nacos配置,调用服务类通过@Value注解拿到值并且打印到控制台

public static void main(String[] args) {
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(NacosConfig.class);
    TestService testService = applicationContext.getBean(TestService.class);
    testService.test();
}
@Component
public class TestService {
    @Value("${nacos.config.server-addr}")
    private String serverAddr;

    public void test() {
        System.out.println("serverAddr:" + serverAddr);
    }
}
@ComponentScan("com.example.nacosstudy.spring")
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:7001"))
@NacosPropertySource(dataId = "test1", autoRefreshed = true)
public class NacosConfig {

}

通过nacos注解@EnableNacosConfig指定地址和@NacosPropertySource指定dataId,进而获取到nacos上的配置信息。

四、Springboot拉取配置及自动刷新

1、引入下面配置并注释掉spring中的nacos-spring-context配置。

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

2、在 application.properties 中配置 Nacos server 的地址。

nacos.config.server-addr=127.0.0.1:7001

3、使用 @NacosPropertySource 加载 dataId 为 test1 的配置源,并开启自动更新。

@SpringBootApplication
@NacosPropertySource(dataId = "test1", autoRefreshed = true)
public class NacosConfigApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigApplication.class, args);
    }
}

4、通过 Nacos 的 @NacosValue 注解设置属性值。

@Controller
@RequestMapping("config")
public class ConfigController {
    // 不自动刷新
    // @Value("${nacos.config.server-addr}")
    // 自动刷新
    @NacosValue(value = "${nacos.version.no}", autoRefreshed = true)
    private String versionNo;

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

5、启动项目,在浏览器访问,修改nacos配置后,刷新浏览器,结果如下:

 注意:

1、自动刷新要用@NacosValue注解,并且开启autoRefreshed = true,默认为false。

2、如果不使用@NacosPropertySource 加载 dataId并且达到自动刷新,可以在application.properties 中配置

nacos.config.data-id=test1
nacos.config.auto-refresh=true
#这个配置要改为true,否则启动会报错
nacos.config.bootstrap.enable=true

五、SpringbootCloud拉取配置及刷新

新建springbootCloud项目,注意版本号需对应,否则项目将有问题。版本说明 Wiki,引入以下包

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

springbootCloud项目启动时会读取boostrap.properties文件,所以要有该文件。在该文件上配置下面代码

spring.cloud.nacos.config.server-addr=127.0.0.1:7001

spring.application.name=test1

新建读取测试配置类

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${nacos.version.no}")
    private String versionNo;

    @RequestMapping("/get")
    public String get() {
        return versionNo;
    }
}

自动刷新核心注解为@RefreshScope,在需要使用配置的地方使用该注解,如果不想每个地方都使用该注解,只能定义公共参数方法,然后在需要用参数的地方调用即可。

新建公共配置类

@Data
@RefreshScope
@Component
public class CommonConfig {
    @Value("${nacos.version.no}")
    private String versionNo;

}

测试调用

@RestController
@RequestMapping("/config")
public class ConfigController {

    @Autowired
    private CommonConfig commonConfig;

    @RequestMapping("/get")
    public String get() {
        return commonConfig.getVersionNo();
    }
}

六、按profile拉取配置

优先级

user.properties>test.properties>test

properties类型可以通过配置进行配置,如果是用yaml,就可以在boostrap.properties配置成yaml

未完待续。。。。。。

### Nacos入门教程 Nacos 是阿里巴巴开源的一款用于动态服务发现、配置管理和服务管理的工具,广泛应用于微服务架构中。以下是关于 Nacos 的核心功能及其使用方法: #### 核心功能介绍 Nacos 提供了两大主要功能模块:**服务发现** 和 **配置管理**。 1. **服务发现** - 服务提供者可以通过向 Nacos 注册中心注册自己的地址信息来暴露自己。 - 客户端可以从 Nacos 获取可用的服务实例列表并进行负载均衡调用。 - 支持多种协议(如 RESTful API),便于不同语言的应用接入[^1]。 2. **配置管理** - 动态更新应用配置而无需重启服务。 - 配置文件支持多环境隔离(开发/测试/生产)以及分组管理。 - 变更通知机制使得当某个配置项被修改后能够实时推送给订阅该配置的所有客户端[^3]。 #### 快速上手指南 要开始使用 Nacos,需完成以下几个步骤: - 下载安装包并通过命令行启动单机模式下的服务器; - 创建 Spring Boot 工程,在 `pom.xml` 中引入必要的依赖库; - 编写简单的 Java 类实现服务注册与消费逻辑; 示例代码如下所示: ```java @SpringBootApplication @EnableDiscoveryClient public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` --- ### 进阶技巧探讨 对于已经熟悉基本操作的人来说,还可以探索更多高级特性以满足复杂场景的需求: #### 自定义命名空间 通过设置不同的 Namespace 来区分各个业务线或团队之间的资源冲突问题[^2]。 #### 数据同步策略优化 针对跨地域部署的情况考虑采用 Push+Pull 组合的方式提升整体性能表现[^5]。 #### 结合其他组件构建完整的解决方案 比如利用 Ribbon 实现更加灵活智能的路由规则制定[^2];或者借助 Feign 简化远程 HTTP 调用过程中的编码工作量减少重复劳动带来的错误风险增加项目的稳定性和扩展能力[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值