Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心)、动态 DNS 服务。
官方介绍是这样的:
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。
官网地址
众所周知 分布式中有CAP之说 C 一致性 A高可用 P 分布式
CAP中只能选择两个,加之P是必选的,所以分布式又分为两大类 -> CP AP
Nacos 可以切换AP和CP两种方式,并且nacos集成了config,Ribbon等等的东西,就不需要每一个得去单独配置了
在项目开始搭建之前我们需要去阿里nacos的官网下载对应版本的nacos并运行起来
nacos下载官网页面
== 下载下来之后==
1.解压
2.进入bin目录运行
运行成功之后访问http://ip:8848如果能看到一下页面就代表运行成功
现在我们来搭建一个基于nacos的springcloud alibaba
项目的基本结构如下图
在最外面的包的maven
4.0.0
org.example
SpringCloudAlibaba
1.0-SNAPSHOT
pom
1.8
2.2.2.RELEASE
Finchley.RELEASE
2.1.0.RELEASE
2.2.0.RELEASE
pamanet-boot
consumer-boot
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.1.0.RELEASE
pom
import
org.springframework.cloud
spring-cloud-dependencies
Hoxton.SR1
pom
import
org.projectlombok
lombok
1.16.18
true
创建好这个之后,就可以开始创建子model了
先来创建payment (服务提供者)
maven
4.0.0
SpringCloudAlibaba
org.example
1.0-SNAPSHOT
pamanet-boot
0.0.1-SNAPSHOT
pamanet-boot
Demo project for Spring Boot
1.8
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-devtools
runtime
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
server:
port: 9001
spring:
application:
name: payment
cloud:
nacos:
discovery:
server-addr: localhost:8848
management:
endpoints:
web:
exposure:
include: '*'
controller
@RestController
@CrossOrigin
public class PamentController {
@GetMapping("/payment/{id}")
public String getPayment(@PathVariable("id") String id) {
return "success" + id;
}
}
这样 一个payment model就搭建起来了
maven
4.0.0
SpringCloudAlibaba
org.example
1.0-SNAPSHOT
consumer-boot
0.0.1-SNAPSHOT
consumer-boot
Demo project for Spring Boot
1.8
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
启动类上同时也需要有@EnableDiscoveryClient 注解
同时调用服务的话 我们用的是nacos集成的ribbon 所以有一个配置类
@Configuration
public class ApplicationContentConfig {
@Bean
@LoadBalanced //负载均衡
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
controller
@RestController
@CrossOrigin
public class ConsumerController {
@Resource
RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverUrl;
@GetMapping("/consumer/payment/{id}")
public String payment(@PathVariable("id") String id) {
return restTemplate.getForObject(serverUrl + "/payment/"+id, String.class);
}
}
配置文件 yml
server:
port: 83
spring:
application:
name: consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
service-url:
nacos-user-service: http://payment
这样一个调用方 consumer就完成了
nacos的config确实做得非常好,在云端修改配置文件之后不用再去搞之前的一大堆东西才能刷新配置文件;这里改了之后加一个注解就立马刷新了配置
4.0.0
SpringCloudAlibaba
org.example
1.0-SNAPSHOT
config
0.0.1-SNAPSHOT
config
Demo project for Spring Boot
1.8
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
同样要在启动类上加上@EnableDiscoveryClient注解
controller
@RestController
@RefreshScope//nacos 云端改了配置之后自动刷新 不用重启
public class ConfigController {
@Value("${config.info}")
String configInfo;
@GetMapping("/config")
public String getConfigInfo() {
return configInfo;
}
}
application.yml
spring:
profiles:
active: dev
bootstrap.yml
server:
port: 3377
spring:
application:
name: config
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
file-extension: yaml
name = spring.application.name + spring.profiles.active+.yaml
这样去nacos的控制台改了配置文件之后直接刷新就有了