1. 文件下载
https://github.com/alibaba/nacos/releases
2. 修改配置文件
在2.2.0.1和2.2.1版本时,必须执行此变更,否则无法启动;其他版本为建议设置。
修改conf
目录下的application.properties
文件。
修改 nacos.core.auth.enabled=true
设置其中的nacos.core.auth.plugin.nacos.token.secret.key
值,详情可查看鉴权-自定义密钥.
注意,文档中的默认值
SecretKey012345678901234567890123456789012345678901234567890123456789
和VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
为公开默认值,可用于临时测试,实际使用时请务必更换为自定义的其他有效值。
sh startup.sh -m standalone
3. 服务注册 流程代码
pom 依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2022.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2022.0.0.0-RC2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
# 新版调用方需要添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>
yml 配置 修改
spring:
# 微服务名称
application:
name: depart-consumer
# nacos 注册中心地址
cloud:
nacos:
server-addr: 192.168.244.128:8848
username: nacos
password: nacos
调用方添加负载均衡
@Configuration
public class DepartConfig {
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
4. 程序中获取 服务实例信息
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/discovery")
public List<String> discovery() {
// 服务
List<String> services = discoveryClient.getServices();
for (String serviceName : services) {
// 服务所有实例
List<ServiceInstance> instances = discoveryClient.getInstances(serviceName);
for (ServiceInstance instance : instances) {
Map<String,Object> map = new HashMap<>();
map.put("serviceName", serviceName);
map.put("serviceId", instance.getServiceId());
map.put("serviceHost", instance.getHost());
map.put("servicePort", instance.getPort());
map.put("uri", instance.getUri());
System.out.println(map);
}
}
return services;
}
{serviceHost=192.168.1.3, servicePort=8080, serviceName=depart-consumer, serviceId=depart-consumer, uri=http://192.168.1.3:8080}
{serviceHost=192.168.1.3, servicePort=8081, serviceName=depart-provider, serviceId=depart-provider, uri=http://192.168.1.3:8081}
5. 数据库持久化
nacos 配置文件修改
spring.datasource.platform=mysql
db.num=1
### Connect URL of DB:
# db.url.0=jdbc:mysql://http://192.168.244.128/:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
# db.user.0=root
# db.password.0=xxxx
6. 集群部署
在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf,请每行配置成ip
(请配置3个或3个以上节点)
# ip:port
200.8.9.16:8848
200.8.9.17:8848
200.8.9.18:8848
多个文件配置 修改端口号
开启默认鉴权插件(可选)
之后修改conf
目录下的application.properties
文件。
设置其中
nacos.core.auth.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.plugin.nacos.token.secret.key=${自定义,保证所有节点一致}
nacos.core.auth.server.identity.key=${自定义,保证所有节点一致}
nacos.core.auth.server.identity.value=${自定义,保证所有节点一致}
上述内容详情可查看权限认证.
注意,文档中的默认值
SecretKey012345678901234567890123456789012345678901234567890123456789
和VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
为公开默认值,可用于临时测试,实际使用时请务必更换为自定义的其他有效值。
各个服务启动
最后修改yml配置文件
server-addr: 192.168.244.128:8849,192.168.244.128:8851,192.168.244.128:8853
spring:
# 微服务名称
application:
name: depart-consumer
# nacos 注册中心地址
cloud:
nacos:
# server-addr: 192.168.244.128:8848
server-addr: 192.168.244.128:8849,192.168.244.128:8851,192.168.244.128:8853
username: nacos
password: nacos
常见面试题
1. 注册表缓存
Nacos宕机 消费者还是能调用提供者 。 发生调用时会缓存注册表到本地
2. 临时实例和持久实例
实例存储位置和健康检测机制不同
临时实例: 会注册到nacos内存, client主动想server上报健康状态,心跳间隔默认5s,15s未收到为不健康。30s内收到心跳,恢复健康,否则进行清除
持久实例: 直接持久化到磁盘,server主动去检测Client健康状态,20s一次,检测失败标记为不健康,不会清除
3. nacos集群数据一致性 CAP模式
默认AP,也支持CP
通过PUT请求修改
http://localhost:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP
4. Nacos数据模型、隔离服务
Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。通过这个隔离服务