<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-spring-boot-starter</artifactId>
<version>3.3.9</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-web-starter</artifactId>
<version>3.1.1</version>
</dependency>
安装
数据库初始化
创建nacos数据库、及相应的用户,并通过如下的sql初始化数据库
https://github.com/alibaba/nacos/blob/2.0.1/distribution/conf/nacos-mysql.sql
Nacos Server 配置
PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=naocs
MYSQL_SERVICE_PASSWORD=naocs
# 以下为2.x新增的服务端间验证方式
NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE=false
NACOS_AUTH_IDENTITY_KEY=serverIdentity
NACOS_AUTH_IDENTITY_VALUE=security
权限配置
### 开启鉴权
nacos.core.auth.enabled=true
### 关闭使用user-agent判断服务端请求并放行鉴权的功能
nacos.core.auth.enable.userAgentAuthWhite=false
### 配置自定义身份识别的key(不可为空)和value(不可为空)
### 所有集群均需要配置相同的server.identity信息
nacos.core.auth.server.identity.key=example
nacos.core.auth.server.identity.value=example
// OR Docker
NACOS_AUTH_ENABLE=true
curl -X POST '127.0.0.1:8848/nacos/v1/auth/login' -d 'username=nacos&password=nacos'
curl -X GET '127.0.0.1:8848/nacos/v1/cs/configs?accessToken={}'
参考资料:
- 对类属性的监听必须在类上加@RefreshScope,否则不会变更
对dataId的监听不能在类上加@RefreshScope,否则会触发2次变更
// @RefreshScope
@RestController
public class NacosApi implements InitializingBean {
@Value("${zc.nacos.v1:v1}") // 必须在类上加@RefreshScope,否则不会变更
private String v1;
@Value("${zc.nacos.v2:v2}")
private String v2;
@Autowired
private NacosConfigManager nacosConfigManager;
@Override
public void afterPropertiesSet() throws Exception {
log.info("Add Nacos Listener");
// 不能在类上加@RefreshScope,否则会接收到2次变更
String name = "test-v3.yaml";
nacosConfigManager.getConfigService().addListener(name,
nacosConfigManager.getNacosConfigProperties().getGroup(), new AbstractListener() {
@Override
public void receiveConfigInfo(String data) {
System.out.println("----------start");
System.out.println(name+" onChange : " + data);
try {
NacosDataParserHandler.getInstance().parseNacosData(name, data, "yaml")
.forEach(x -> System.out.println(x.getName() + " = " + x.getSource()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("----------end");
}
});
}
}
多配置-不支持多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 的值越大,优先级越高
<a name="jcJNT"></a>
## 版本更新
<a name="I7Uj2"></a>
### 2.0.1
<a name="cXpUI"></a>
#### 新客户端gRPC请求服务端端口9848,如通过nginx则也要开放
| 9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 |
| --- | --- | --- |
| 9849 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 |
<a name="91r2m"></a>
#### pom强制使用2.0.1版本客户端
```xml
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.5.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.5.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.0.1</version>
</dependency>