最近新项目中使用到了Nacos,在这里做一个简单的入门分享。
先看看官网介绍,地址nacos.io
一、它是干嘛的?
官方文档介绍:
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
它的两点核心功能就是:动态配置服务,服务发现及管理。
之前我们可能通过springcloud config+git的方式来进行配置的管理,eureka来进行服务的注册与发现。现在可以通过Nacos来进行两者的结合,非常的方便,而且nacos的配置是存储在数据库中的,安全可靠。
二、Nacos搭建
下载压缩包https://github.com/alibaba/nacos/releases,我这里使用的是1.2.0版本。解压进入bin目录下,双击startup.cmd运行。
浏览器访问127.0.0.1:8848/nacos,默认登录账号密码都是nacos,可以改变或设置权限等,具体参考官方手册。
配置相关概念
Namespace:代表不同环境,如开发、测试、生产环境。
Group:代表某项目,如XX医疗项目、XX电商项目。
DataId:每个项目下往往有若干个工程,每个配置集(DataId)是一个工程的主配置文件。
DataId默认格式为:${spring.application.name }-${spring.profiles.active}.yaml
1.新建一个namespace:
我这里就命名为nacos-test
2.在刚刚创建的namespace下添加配置文件
三、服务的注册发现与配置管理实践
1.创建父工程nacos-test,再创建两个子工程分别是nacos-provider,nacos-consumer,结构如下
2.父项目pom文件
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0modelVersion> <groupId>com.dikugroupId> <artifactId>nacos-testartifactId> <version>1.0-SNAPSHOTversion> <modules> <module>nacos-providermodule> <module>nacos-consumermodule> modules> <packaging>pompackaging> <properties> <spring.cloud.version>Greenwich.RELEASEspring.cloud.version> <spring.cloud.alibaba.version>2.1.0.RELEASEspring.cloud.alibaba.version> <spring.boot.version>2.1.3.RELEASEspring.boot.version> properties> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloudgroupId> <artifactId>spring-cloud-alibaba-dependenciesartifactId> <version>${spring.cloud.alibaba.version}version> <type>pomtype> <scope>importscope> dependency> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-dependenciesartifactId> <version>${spring.cloud.version}version> <type>pomtype> <scope>importscope> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-dependenciesartifactId> <version>${spring.boot.version}version> <type>pomtype> <scope>importscope> dependency> dependencies> dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-maven-pluginartifactId> plugin> plugins> build>project>
3.nacos-provider子项目pom文件(nacos-consumer与之差不多)
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>nacos-testartifactId> <groupId>com.dikugroupId> <version>1.0-SNAPSHOTversion> parent> <modelVersion>4.0.0modelVersion> <artifactId>nacos-providerartifactId> <dependencies> <dependency> <groupId>com.alibaba.cloudgroupId> <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId> dependency> <dependency> <groupId>com.alibaba.cloudgroupId> <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> dependency> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-openfeignartifactId> dependency> dependencies>project>
4.nacos-provider的bootstrap.yml文件(nacos-consumer与之差不多)
5.nacos-provider的ProController
6.启动类
@SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class App { public static void main(String[] args) { SpringApplication.run(App.class,args); }}
7.nacos-consumer的ConClient
@FeignClient(name = "nacos-provider")public interface ConClient{ @GetMapping("/provider") String getConfigName();}
8.nacos-consumer的ConController
@RestController@RefreshScopepublic class ConController { @Value("${common.name}") private String configName; @Autowired private ConClient conClient; @GetMapping("/all") public String getAllConfigName(){ return "provider configname : "+conClient.getConfigName()+ "----------->"+"consumer configname : "+ configName; }}
9.nacos-provider-dev.yaml的配置(nacos-consumer-dev.yaml类似)
来看看我们的服务列表
10.使用Postman测试
修改nacos-provider-dev.yaml为
再次发送请求
源码已经上传github,地址:git@github.com:DikU-16/nacos-test.git