我只是个新手小白,很多地方考虑不到,欢迎大家指出,不要喷我。ヾ(◍°∇°◍)ノ゙
文章目录
Nacos简介
是什么
1.一个更易于构建原生应用的动态服务发现、配置管理和服务管理平台
2.Nacos:Dynamic Naming and Configuration Service
3.Nacos就是注册中心+配置中心的组合。
Nacos=Eureka+Config+Bus
各大注册中心对比
Nacos切换CP、AP:
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverModel&value=CP'
Nacos作为注册中心的使用
POM文件
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置文件
spring:
application:
name: server-name
cloud:
nacos:
discovery:
server-addr: IP:port #配置Nacos地址
作为消费者使用与eureka一样,也是使用restTemplate或者openFeign通过服务名访问就好。
举个栗子:
@RestController
@Slf4j
public class OrderNacosController {
@Resource
private RestTemplate restTemplate;
// 这里填服务者注册的服务名
@Value("${http://nacos-payment-provider}")
private String serverURL;
@GetMapping(value = "/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id) {
return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
}
}
注:nacos包里带了ribbon,所以支持负载均衡。
Nacos作为配置中心的使用
POM
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置文件:
bootstrap.yml:
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: IP:port #Nacos服务注册中心地址
config:
server-addr: IP:port #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
group: TEST_GROUP # 指定组
namespace: f18ae372-519c-4407-9495-ba0824858b84 # 指定命名空间
# 配置文件匹配规则
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml
举个栗子:
在nacos控制台中,
在命名空间ID:f18ae372-519c-4407-9495-ba0824858b84中新增配置
@RestController
@RefreshScope //支持Nacos的动态刷新功能。
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
测试结果:
Nacos的匹配规则
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
动态刷新
Nacos自带动态刷新!且不需要我们再发送指令!敲方便!
分类配置
问题1:
实际开发中,通常一个系统会准备
dev开发环境
test测试环境
prod生产环境
如何保证指定环境启动时服务能正确读到Nacos上相应环境的配置呢
问题2:
一个大型分布式微服务系统会有很多微服务子项目
每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境…
那怎么对这些微服务配置进行管理呢?
图形化管理
配置管理
命名空间
Namespace+group+data ID三者关系?为什么这么设计?
- 是什么
类似java的package名和类名
最外层的namespace用于区分部署环境,Group和DataId逻辑上区分两个目标对象 - 三者情况
Nacos集群和持久化配置
官方架构图
翻译: