一、关于
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
Nacos 的关键特性包括:
- 服务发现和服务健康监测
- 动态配置服务
- 动态 DNS 服务
- 及其元数据管理
本文代码仓库地址:https://github.com/lazyrabb1t/rabb-springcloud-demo
二、使用
2.1 启动Nacos服务
下载nacos包:https://github.com/alibaba/nacos/releases
解压,然后到nacos/bin目录执行以下命令:
# windows
startup.cmd -m standalone
# linux
startup.sh -m standalone
执行完成后即可通过浏览器访问nacos管理界面,地址:http://localhost:8848/nacos
默认账号密码为nacos/nacos
2.2 创建提供者模块
2.2.1 添加依赖
...
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.12.RELEASE</spring-boot.version>
<spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
...
2.2.2 配置
创建bootstrap.yml文件,配置nacos相关信息:
spring:
cloud:
# 设置Nacos服务端配置
nacos:
server-addr: localhost:8848
username: nacos
password: nacos
# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
config:
namespace:
application.yml配置如下:
server:
port: 20000
spring:
application:
name: rabb-nacos-provider
2.2.3 添加测试接口
@SpringBootApplication
@RestController
@Slf4j
public class NacosProviderApplication {
@Value("${server.port}")
String port;
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
@GetMapping
public String hello() {
log.info("调用提供者hello接口");
return "Hello SpringCloud! from port:" + port;
}
}
2.3 创建消费者模块
2.3.1 添加依赖
同2.2.1
2.3.2 配置
创建bootstrap.yml文件,配置nacos相关信息:
spring:
cloud:
# 设置Nacos服务端配置
nacos:
server-addr: localhost:8848
username: nacos
password: nacos
# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
config:
namespace:
file-extension: yml
application.yml配置如下:
server:
port: 20001
spring:
application:
name: rabb-nacos-consumer
rabb:
service-name: rabb-nacos-provider
2.3.3 添加测试方法调用提供者方法以及动态读取配置中心配置
@SpringBootApplication
public class NacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@RestController
// 实现配置自动更新
@RefreshScope
public class TestController {
private final RestTemplate restTemplate;
@Value("${rabb.service-name}")
private String serviceName;
@Value("${rabb.url}")
private String url;
@Autowired
public TestController(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@GetMapping
public String hello() {
return restTemplate.getForObject("http://" + serviceName, String.class);
}
@GetMapping("c")
public String configTest() {
return url;
}
}
}
2.4 在nacos添加相应配置
浏览器访问nacos管理界面,进入配置管理
-配置列表菜单
,然后添加配置,Data ID
为 rabb-nacos-consumer.yml
,配置格式选YAML
,配置内容如下:
rabb:
url: https://www.lazyrabbit.xyz/
dataId的命名格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
2.5 测试
启动两个模块,调用消费者的接口测试服务以及配置管理的功能
参考
Nacos官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html
Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本关系:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E