1. 什么是nacos
nacos 是阿里巴巴的一个开源项目,能够实现动态服务发现、服务配置、服务元数据及流量管理。
2. nacos 安装
笔者这里为了学习方便,安装了 Window 的版本。acos-2.0.0-window版本
下载压缩包后,解压即可,之后进入 bin 目录下,在 cmd 下执行命令startup.cmd -m standalone
,即可以单机模式启动。
Linux 版本与 Window 版本安装类似,只需下载并解压即可。启动命令为sh startup.sh -m standalone
。
acos-2.0.0-Linxu版本
如果成功启动,通过http://localhost:8848/nacos/index.html 即可进入nacos的控制台。默认账号密码为nacos/nacos。
3. 服务注册与发现 [Nacos discovery]
nacos 最常用的功能之一就作为注册中心。
使用 nacos 作为注册中心非常简单,只需要三步:
<1> 加入依赖。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<2> 启动类添加注解,@EnableDiscoveryClient
注解也可以省略。
@SpringBootApplication
@EnableDiscoveryClient
public class NacosApplication {
public static void main(String[] args) {
SpringApplication.run(NacosApplication.class, args);
}
}
<3> 编写配置文件
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos的地址
启动项目后,若能在控制台中看到注册的服务,则表示注册成功。
4. 编写一个小 demo 测试下
服务提供者:
@RestController
@RequestMapping
public class ServiceCotroller {
@Value("${server.port}")
String port;
@RequestMapping("/listService")
public String listService(){
System.out.println("server port is " + port);
return "server port is " + port;
}
}
服务消费者:
@RestController
@RequestMapping
public class ConsumerController {
@Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private RestTemplate restTemplate;
@GetMapping("/getService")
public String listService(){
ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-test");
String url = serviceInstance.getUri().toString() + "/listService";
ResponseEntity<String> entity = restTemplate.getForEntity(url, String.class);
return entity.getBody();
}
}
5. nacos 概念
- 命名空间(NameSpace):用于进行粒度的配置隔离,常用的场景之一是进行不同环境的资源隔离,默认是 public。配置:
spring.cloud.nacos.discovery.namespace=[namespaceId]
- 服务分组(Group):设置服务所处的不同分组,不同分组间相互隔离,默认 DEFAULT_GROUP。
spring.cloud.nacos.discovery.group=[groupId]
- 集群(Cluster):可以实现同集群间优先调用,例如同地集群间优先调用。
spring.cloud.nacos.discovery.cluster-name=[clusterName]
更多的配置可以查看:Nacos discovery 配置项信息
6. 配置中心[Nacos config]
如果使用 nacos 作为注册中心,需要添加依赖。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
并且必须使用 bootstrap.properties 配置文件来配置 nacos 的地址。
spring.application.name=config-demo
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
区分不同环境的配置文件
除了在加载 bootstrap.properties 之外,nacos 还会加载 dataid 为 ${spring.application.name}.properties
、${spring.application.name}-${profile}.properties
的配置文件。因此如果要区分不同环境的配置文件可以在bootstrap.properties
中添加参数来进行配置:
spring.profiles.active=${profile}
使用多个配置文件
这两种方式需要带上文件后缀名
# 支持多个共享 Data Id 的配置
spring.cloud.nacos.config.shared-configs[n].data-id=dataId
# 支持多个扩展 Data Id 的配置
spring.cloud.nacos.config.extension-configs[n].data-id=dataId
注:在使用中除了 extension-configs[n] 的优先级大于 shared-configs[n] 之外,笔者并未找到其他关于这两种配置的区别,个人理解是这两种配置只是为了区分共享配置与扩展配置。希望了解的大佬可以告知。
关于 nacos 中配置的优先级:${spring.application.name}
+[${profile}]
优先于上述的两种配置。
其他更多的配置请参考:Nacos-config 配置中心