Nacos 是什么?
一句话: Nacos 就是注册中心[替代 Eureka]+配置中心[替代 Config]
Nacos 下载&运行
环境要求: Java8/Maven 3.2.x+
解压,运行 bin/startup.cmd
浏览器 http://localhost:8848/nacos 用户名密码都为nacos
将服务注册到nacos
1.在父项目引入spring-cloud-alibaba 依赖
2.修改本模块依赖
<!--
在微服务模块引入
nacos-discovery starter -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.创建application.yml
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
#
配置
Nacos
地址
#
暴露所有监控点
management:
endpoints:
web:
exposure:
include: '*'
4.创建著启动类+
@EnableDiscoveryClient注解
//@EnableDiscoveryClient
引入的是
Nacos
发现注解
创建服务消费方配置与上面一样
controller有变化
@RestController
@Slf4j
public class
MemberNacosConsumerController
{
/**
*
: http://member-service-nacos-provider Nacos
要求这里的服务名要小写
,
和服
务
Nacos Server
中注册名保持一致
*/
public static final
String
MEMBER_SERVICE_NACOS_PROVIDER_URL
=
"http://member-service-nacos-provider"
;
@Resource
private
RestTemplate
restTemplate
;
@PostMapping
(
"/member/nacos/consumer/save"
)
public
Result
<
Member
>
save
(
Member
member) {
return
restTemplate
.postForObject(
MEMBER_SERVICE_NACOS_PROVIDER_URL
+
"/member/save"
, member,
Result
.
class
);
}
nacos配置中心实例
1.在
Nacos Server
加入配置
2.进入到 Nacos Server.
加入配置
Data ID: e-commerce-nacos-config-client-dev.yaml
3.修改
pom.xml
<!--nacos-config-->
<
dependency
>
<
groupId
>com.alibaba.cloud</
groupId
>
<
artifactId
>spring-cloud-starter-alibaba-nacos-config</
artifactId
>
</
dependency
>
4.
创建
application.yml
spring
:
profiles
:
active
: dev
#
指定环境是 dev/test/prod... dev 开发环境对应 data id
5.
创建
bootstrap.yml
server
:
port
:
5000
spring
:
application
:
#
这里的
name
需要参考
nacos
配置中心的
Data Id
name
: e-commerce-nacos-config-client
cloud
:
nacos
:
discovery
:
server-addr
: localhost:8848
#
服务注册中心地址
config
:
server-addr
: localhost:8848
#
配置中心地址
file-extension
: yaml
#
指定
yaml
格式的配置
解读:nacos 配置客户端,会根据配置,找到资源获取配置文件
也就到 localhost:8848 下的 e-commerce-nacos-config-client-dev.yaml
配置文件 application.yml 和 bootstrap.yml 结合会得到配置文件/资源的地址
6.业务类
@RestController
@RefreshScope
//
@RefreshScope 是 springcloud 的原生注解,实现配置信息自动刷新
public class
NacosConfigClientController
{
解读
@Value("${config.ip}")
* 1. client
会拉取
Nacos Server
的
e-commerce-nacos-config-client-dev.yaml
* config:
*
ip: "122.11.11.11"
将config.ip赋给该属性
@Value
(
"${config.ip}"
)
private
String
configIp
;
@Value
(
"${config.name}"
)
private
String
configName
;
@GetMapping
(
"/nacos/config/ip"
)
public
String
getConfigIp
() {
return
configIp
;
}
@GetMapping
(
"/nacos/config/name"
)
public
String
getConfigName
() {
return
configName
;
}
}
注意事项
1.
注意在
Nacos Server
的配置文件的后缀是
.yaml ,
而不是
.yml
2.
在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目
的正常启动
,
也就是说如果项目不能正确的获取到
Nacos Server
的配置数据,项目是启动
不了的
.[
演示
]
3. springboot
中配置文件的加载是存在优先级顺序的,
bootstrap.yml
优先级高于
application.yml
4.
@RefreshScope
是
springcloud
原生注解,实现配置信息自动刷新
,
如果在
Nacos
Server
修改了配置数据,
Client
端就会得到最新配置
[
演示
]
Nacos 分类配置 (实现配置隔离)
理解:只通过修改配置文件就可切换为nacos中的配置
DataID 方案
1. 在 nacos server 创建新的配置:e-commerce-nacos-config-client-test.yaml
2.修改 application.yml
spring
:
profiles
:
#active: dev #
指定环境
dev/test/...
active: test
#
指定环境是
test
Group
方案
1.
在
nacos server
创建新的配置:
e-commerce-nacos-config-client-dev.yaml
Group:order
2.修改
application.yml
spring
:
profiles
:
active: dev
#
指定环境
dev/test/...
#active: test #
指定环境是
test
3.修改
bootstrap.yml
1.
增加
group
参数
spring
application
:
#
这里的
name
需要参考
nacos
配置中心的
Data Id
name
: e-commerce-nacos-config-client
cloud
:
nacos
:
discovery
:
server-addr
: localhost:8848
#
服务注册中心地址
config
:
server-addr
: localhost:8848
#
配置中心地址
file-extension
: yaml
#
指定
yaml
格式的配置
group: order
#
指定
group,
如果不写是默认组
DEFAULT_GROUP
Namespace 方案解决
1. 在 nacos server 创建新的 namespace
2. 在 nacos server 创建新的 group/dataid
3.修改 application.yml
spring
:
profiles
:
active: dev
#
指定环境
dev/test/...
#active: test #
指定环境是
test
4.修改 bootstrap.yml
spring
:
application
:
#
这里的
name
需要参考
nacos
配置中心的
Data Id
name
: e-commerce-nacos-config-client
cloud
:
nacos
:
discovery
:
server-addr
: localhost:8848
#
服务注册中心地址
config
:
server-addr
: localhost:8848
#
配置中心地址
file-extension
: yaml
#
指定
yaml
格式的配置
group: seckill
#
指 定
group
要 存 在 , 否 则 报 错
, 如 果 不 写 是 默 认 组
DEFAULT_GROUP
namespace: e37564de-2e0a-4f79-96e9-23ac35b90936
#
阿 里 巴 巴 公 司 的
namespaceID