地址
git地址:GitHub - alibaba/nacos
GitHub:spring-cloud-alibaba 内含示例文档
springcloud:Spring Cloud Alibaba
官网:Nacos Spring Cloud 快速开始
下载
最新版本: 2.2.1 (Mar 17th, 2023)
nacos-server-2.2.1.zip
解压得到 nacos 服务端
配置
参数 | 默认值 | 启止版本 | 说明 |
---|---|---|---|
nacos.core.auth.enabled | false | 1.2.0 ~ latest | 是否开启鉴权功能 |
nacos.core.auth.system.type | nacos | 1.2.0 ~ latest | 鉴权类型 |
nacos.core.auth.plugin.nacos.token.secret.key | SecretKey0123456789~(2.2.0.1后无默认值) | 2.1.0 ~ latest | 默认鉴权插件用于生成用户登陆临时accessToken所使用的密钥,使用默认值有安全风险 |
nacos.core.auth.plugin.nacos.token.expire.seconds | 18000 | 2.1.0 ~ latest | 用户登陆临时accessToken的过期时间 |
nacos.core.auth.enable.userAgentAuthWhite | false | 1.4.1 ~ latest | 是否使用useragent白名单,主要用于适配老版本升级,置为true时有安全风险 |
nacos.core.auth.server.identity.key | serverIdentity(2.2.1后无默认值) | 1.4.1 ~ latest | 用于替换useragent白名单的身份识别key,使用默认值有安全风险 |
nacos.core.auth.server.identity.value | security(2.2.1后无默认值) | 1.4.1 ~ latest | 用于替换useragent白名单的身份识别value,使用默认值有安全风险 |
SecretKey0123456789~ | 1.2.0 ~ 2.0.4 | 同nacos.core.auth.plugin.nacos.token.secret.key | |
18000 | 1.2.0 ~ 2.0.4 | 同nacos.core.auth.plugin.nacos.token.expire.seconds |
根据conf/mysql-schema.sql 创建数据库 nacos_config,并生成对应的表,修改application.properties
新增以下配置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.220.100:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
nacos.core.auth.plugin.nacos.token.secret.key
2.2.0.1后无默认值,必须要配置,否则会出现[[谷粒商城遇到的bug#启动报错]] 的bug
# 使用zxldenacosserverstartuplocaltest转换为base64
nacos.core.auth.plugin.nacos.token.secret.key=enhsZGVuYWNvc3NlcnZlcnN0YXJ0dXBsb2NhbHRlc3Q=
地址栏打开cmd,输入startup.cmd -m standalone
启动
访问:Nacos本地环境
账号密码都是:nacos
作为服务注册
- 首先,修改 pom.xml 文件,引入 Nacos Discovery Starter。
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
- 在应用的 /src/main/resources/application.properties 配置文件中配置 Nacos Server 地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
- 使用 @EnableDiscoveryClient 注解开启服务注册与发现功能
@SpringBootApplication @EnableDiscoveryClient public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } @RestController class EchoController { @GetMapping(value = "/echo/{string}") public String echo(@PathVariable String string) { return string; } } }
作为配置中心
新版本方式
官方Github示例文档:Nacos Config Example
- 修改application.yml:
spring:
cloud:
nacos:
serverAddr: 127.0.0.1:8848
config:
import:
- nacos:nacos-config-example.properties?refresh=true
- 无需引入
spring-cloud-starter-bootstrap
,无需创建bootstrap.properties
参考教程视频的方式
教程使用的是老版本,以下方式可以当作项目中升级版本可用的方式
- 引入依赖,需要额外引入
spring-cloud-starter-bootstrap
否则不会生效
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.6</version>
</dependency>
- 创建一个
bootstrap.properties
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
- 需要给配置中心默认添加一个数据集(Data Id)
gulimall-coupon.properties
,这里是默认规则 - 给数据集添加任何配置
- 动态获取配置 (如果配置中心和应用中配置相同项,优先使用配置中心,不然还有啥意义呢)
@RefreshScope
:动态获取并刷新配置@Value("${coupon.user.name}")
:获取配置
@RestController
@RefreshScope # 动态获取并刷新配置
@RequestMapping("coupon/coupon")
public class CouponController {
@Value("${coupon.user.name}")
private String name;
@Value("${coupon.user.age}")
private Integer age;
@RequestMapping("/testNacosConfig")
public R testNacosConfig() {
return R.ok().put("name", name).put("age", age);
}
}
Nacos 配置中心进阶
命名空间
- 默认:public(保留空间):默认新增的所有配置都在public空间。
- 可以新建命名空间:开发(dev)、测试(test)、生产(prod)
- 每一个微服务之间互相隔离:优惠券(coupon)、会员(member)等
spring.cloud.nacos.config.namespace=指定命名空间的ID
配置集
一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级 别等配置项。
配置集ID
类似配置文件的文件名
Data ID: 文件名
配置分组
默认所有的配置集都属于:DEFAULT_GROUP
新增配置时可以修改为自定义的值:如:1111,618等
当然用微服务名作为命名空间时,不同组可以当作不同的环境,总之,根据实际需要进行配置,十分灵活。
同时加载多个配置集
微服务的任何配置信息,任何配置文件都能放在配置中心中
新版本的方式
- 新建coupon命名空间
- 将配置文件拆分为datasourse.yml、mybatis.yml、other.yml
- 分组均为dev
- 在application.yml中配置
spring:
application:
name: gulimall-coupon
cloud:
nacos:
server-addr: 127.0.0.1:8848
config:
namespace: ce9a99fa-c8ec-40a5-9688-adeefa739039
group: dev
config:
import:
# - nacos:gulimall-coupon.properties?refresh=true # 单个配置文件
- optional:nacos:datasourse.yml?refresh=true
- optional:nacos:mybatis.yml?refresh=true
- optional:nacos:other.yml?refresh=true
# - optional:nacos:mybatis.yml?group=group_02&refreshEnabled=false
server:
port: 7000
coupon:
user:
name: zhangsan
age: 18
移除bootstrap.properties之后的多版本配置参考:
Github Support spring.config.import
参考教程视频的方式
- 新建coupon命名空间
- 将配置文件拆分为datasourse.yml、mybatis.yml、other.yml
- 分组均为dev
- 在bootstrap.properties中配置
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=a3bc580a-a004-4c95-b967-a9a3f7493449 #指定命名空间的ID
# idea中可见该方式已被废弃@Deprecated
spring.cloud.nacos.config.ext-config[0].data-id=datasourse.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true
spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true