Nacos 实践

82 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

一、文档

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

二、如何配置

安装文档见 Nacos 快速开始

1. 依赖文件

<spring-cloud.version>2021.0.3</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>${spring-cloud-alibaba.version}</version>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>${spring-cloud-alibaba.version}</version>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
    <version>3.1.3</version>
</dependency>

2. bootstrap.yaml

spring:
  application:
    name: csd-project-template
  profiles:
    active: dev
  cloud:
    nacos:
      discovery:
        server-addr: http://localhost:8848
        namespace: 9a8c7db0-35ba-472a-a5af-3f3c3cd56030

      config:
        server-addr: http://localhost:8848
        namespace: 9a8c7db0-35ba-472a-a5af-3f3c3cd56030
        file-extension: yaml
        group: csd

3. 启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class Application {

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

4. Demo

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @RequestMapping("/get")
    public boolean get() {
        return useLocalCache;
    }
}

5. 结果验证

  • 服务启动获取到 Nacos 配置 :

  • Nacos 管理界面注册成功:

三、问题汇总

1. Java 版本问题

推荐使用 Java17,如果有Java11项目建议升级

2. 如果使用 namespace

  • 当您在应用中需要配置指定的 namespace 时,填入的是命名空间 ID

  • 当您在应用中需要配置指定的 namespace 时,填入的是命名空间 ID

  • 当您在应用中需要配置指定的 namespace 时,填入的是命名空间 ID

3. file-extension 文件类型应该与配置页面一致

image.png

4. 启动报错

  • The request was rejected because the URL was not normalized

注意注册中心的地址不能以斜杠结尾

  • Param ‘serviceName‘ is illegal, serviceName is blank

    原因:spring-cloud-dependencies 2020.0.0 版本不在默认加载bootstrap 文件,如果需要加载bootstrap 文件需要手动添加依赖。

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bootstrap -->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.3</version>

5. bootstrap.yml

  • bootstrap.yml 用来在程序引导时执行,应用于更加早期配置信息读取,可以使用来配置application.yml 中使用到参数

  • application.yml 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数

6. 版本关系

一定要注意版本关系,奇奇怪怪的问题就源于版本问题。

一定要注意版本关系,奇奇怪怪的问题就源于版本问题。

一定要注意版本关系,奇奇怪怪的问题就源于版本问题。

image.png