1. <dependency>
  2. <groupId>com.taobao.arthas</groupId>
  3. <artifactId>arthas-spring-boot-starter</artifactId>
  4. <version>3.3.9</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.cloud</groupId>
  8. <artifactId>spring-cloud-starter-openfeign</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>io.opentracing.contrib</groupId>
  12. <artifactId>opentracing-spring-jaeger-web-starter</artifactId>
  13. <version>3.1.1</version>
  14. </dependency>

安装

数据库初始化

创建nacos数据库、及相应的用户,并通过如下的sql初始化数据库

https://github.com/alibaba/nacos/blob/2.0.1/distribution/conf/nacos-mysql.sql

Nacos Server 配置

  1. PREFER_HOST_MODE=hostname
  2. MODE=standalone
  3. SPRING_DATASOURCE_PLATFORM=mysql
  4. MYSQL_SERVICE_HOST=mysql
  5. MYSQL_SERVICE_DB_NAME=nacos
  6. MYSQL_SERVICE_PORT=3306
  7. MYSQL_SERVICE_USER=naocs
  8. MYSQL_SERVICE_PASSWORD=naocs
  9. # 以下为2.x新增的服务端间验证方式
  10. NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE=false
  11. NACOS_AUTH_IDENTITY_KEY=serverIdentity
  12. NACOS_AUTH_IDENTITY_VALUE=security

权限配置

  1. ### 开启鉴权
  2. nacos.core.auth.enabled=true
  3. ### 关闭使用user-agent判断服务端请求并放行鉴权的功能
  4. nacos.core.auth.enable.userAgentAuthWhite=false
  5. ### 配置自定义身份识别的key(不可为空)和value(不可为空)
  6. ### 所有集群均需要配置相同的server.identity信息
  7. nacos.core.auth.server.identity.key=example
  8. nacos.core.auth.server.identity.value=example
  9. // OR Docker
  10. NACOS_AUTH_ENABLE=true
  11. curl -X POST '127.0.0.1:8848/nacos/v1/auth/login' -d 'username=nacos&password=nacos'
  12. curl -X GET '127.0.0.1:8848/nacos/v1/cs/configs?accessToken={}'

参考资料:

  1. 对类属性的监听必须在类上加@RefreshScope,否则不会变更
  2. 对dataId的监听不能在类上加@RefreshScope,否则会触发2次变更

    1. // @RefreshScope
    2. @RestController
    3. public class NacosApi implements InitializingBean {
    4. @Value("${zc.nacos.v1:v1}") // 必须在类上加@RefreshScope,否则不会变更
    5. private String v1;
    6. @Value("${zc.nacos.v2:v2}")
    7. private String v2;
    8. @Autowired
    9. private NacosConfigManager nacosConfigManager;
    10. @Override
    11. public void afterPropertiesSet() throws Exception {
    12. log.info("Add Nacos Listener");
    13. // 不能在类上加@RefreshScope,否则会接收到2次变更
    14. String name = "test-v3.yaml";
    15. nacosConfigManager.getConfigService().addListener(name,
    16. nacosConfigManager.getNacosConfigProperties().getGroup(), new AbstractListener() {
    17. @Override
    18. public void receiveConfigInfo(String data) {
    19. System.out.println("----------start");
    20. System.out.println(name+" onChange : " + data);
    21. try {
    22. NacosDataParserHandler.getInstance().parseNacosData(name, data, "yaml")
    23. .forEach(x -> System.out.println(x.getName() + " = " + x.getSource()));
    24. } catch (IOException e) {
    25. // TODO Auto-generated catch block
    26. e.printStackTrace();
    27. }
    28. System.out.println("----------end");
    29. }
    30. });
    31. }
    32. }

    多配置-不支持多namespace

    ```bash A: 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置 B: 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多个扩展 Data Id 的配置 C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置

data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。 refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。

当三种方式共同使用时,他们的一个优先级关系是:A < B < C,n 的值越大,优先级越高

  1. <a name="jcJNT"></a>
  2. ## 版本更新
  3. <a name="I7Uj2"></a>
  4. ### 2.0.1
  5. <a name="cXpUI"></a>
  6. #### 新客户端gRPC请求服务端端口9848,如通过nginx则也要开放
  7. | 9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 |
  8. | --- | --- | --- |
  9. | 9849 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 |
  10. <a name="91r2m"></a>
  11. #### pom强制使用2.0.1版本客户端
  12. ```xml
  13. <dependency>
  14. <groupId>com.alibaba.cloud</groupId>
  15. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  16. <version>2.1.5.RELEASE</version>
  17. <exclusions>
  18. <exclusion>
  19. <groupId>com.alibaba.nacos</groupId>
  20. <artifactId>nacos-client</artifactId>
  21. </exclusion>
  22. </exclusions>
  23. </dependency>
  24. <dependency>
  25. <groupId>com.alibaba.cloud</groupId>
  26. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  27. <version>2.1.5.RELEASE</version>
  28. <exclusions>
  29. <exclusion>
  30. <groupId>com.alibaba.nacos</groupId>
  31. <artifactId>nacos-client</artifactId>
  32. </exclusion>
  33. </exclusions>
  34. </dependency>
  35. <dependency>
  36. <groupId>com.alibaba.nacos</groupId>
  37. <artifactId>nacos-client</artifactId>
  38. <version>2.0.1</version>
  39. </dependency>