1、概述
1⃣️Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
2⃣️功能:Nacos就是注册中心 + 配置中心的组合,替代Eureka做服务注册中心,替代Config做服务配置中心。
3⃣️运行:在nacos的bin目录下运行sh startup.sh -m standalone。
4⃣️关闭:在nacos的bin目录下运行sh shutdown.sh。
5⃣️官网:命令运行成功后直接访问http://localhost:8848/nacos,默认账号密码都是nacos。
2、Nacos作为服务注册中心
2.1 基于Nacos的服务提供者
1⃣️新建cloudalibaba-provider-payment9001
2⃣️改POM
父POM:
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
本POM:
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3⃣️yml
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
4⃣️主启动:添加@EnableDiscoveryClient注解
5⃣️业务类
@RestController
public class PaymentController
{
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id)
{
return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
}
}
6⃣️测试:http://localhost:9001/payment/nacos/1
2.2 基于Nacos的服务消费者
1⃣️新建cloudalibaba-consumer-nacos-order83
2⃣️改POM
3⃣️yml
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:
nacos-user-service: http://nacos-payment-provider
4⃣️主启动
5⃣️业务类Config
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
6⃣️业务类Controller
@RestController
@Slf4j
public class OrderNacosController {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
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);
}
}
7⃣️测试:http://localhost:83/consumer/payment/nacos/13
83访问9001/9002,轮询负载,nacos支持负载均衡。
3、Nacos作为服务配置中心演示
3.1 Nacos作为配置中心-基础配置
1⃣️新建cloudalibaba-config-nacos-client3377
2⃣️Pom
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
3⃣️yml
bootstrap.yml:
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
# group: TEST_GROUP
# namespace: 2feac27e-056d-4d6c-aeab-afcf682496b8
# namespace: test
application.yml
spring:
profiles:
# active: dev # 表示开发环境
# active: test # 表示测试环境
active: info
4⃣️主启动
5⃣️业务类
@RestController
@RefreshScope //支持Nacos的动态刷新功能。
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
6⃣️测试:调用接口查看配置信息http://localhost:3377/config/info。
在调用接口的时候,会去nacos中找配置文件,文件名的公式是${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml
⚠️@RefreshScope注解实现配置自动更新,修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新。
3.2 Nacos作为配置中心-分类配置
1⃣️Namespace+Group+Data ID三者关系
2⃣️加载配置的方案
简单来说就是在bootstrap.yml中进行配置,group和namespace属性,如果配置了该属性竟会从大往下找,先找到namespace再找group再往下找,如果没有配置就按照去找默认的。