SpringCloud Alibaba Nacos注册中心文档
一、前言
本篇笔记是我根据SpringCloud Alibaba Nacos官方文档学习整理而来,主要是对Nacos注册中心的部署、Nacos Server的动态配置及Nacos Server的服务注册与发现的一个官方Demo的学习,Demo很简单,主要是为了先搭建我的第一个微服务工程,若是也有在自学微服务的码友,可以互勉,互相进步!
Nacos官方文档地址:https://nacos.io/zh-cn/docs/quick-start.html
二、Nacos注册中心部署
1.下载最新的Nacos:
- github下载地址:https://github.com/alibaba/nacos/releases/
- gitee下载地址: https://gitee.com/mirrors/Nacos/releases/
2.解压nacos-server-1.4.3.tar.gz:tar -xvf nacos-server-$version.tar.gz
3. 进入解压后的bin文件夹中并执行启动命令:cd nacos/bin
- Linux:
sh startup.sh -m standalone
或bash startup.sh -m standalone
- Windows:
startup.cmd -m standalone
4.测试:访问http://localhost:8848/nacos/,进入Nacos 注册中心页面,用户名密码均为nacos
5. 关闭nacos注册中心:Linux:sh shutdown.sh
Windows:shutdown.cmd
【注意】 :
- 启动命令中standalone表示单机启动,新版Nacos默认是集群启动,故需要加上该参数;
- 也可以直接打开startup.sh,将export MODE="cluster"改为export MODE=“standalone”;
三、Nacos Spring Cloud快速开始
主要从以下两个方面来演示:
- 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
- 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。
3.1 创建父工程版本依赖
-
新建空的Maven项目(删除src)命名为springcloud,然后在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.0</modelVersion> <groupId>org.myapps</groupId> <artifactId>springcloud</artifactId> <version>1.0-SNAPSHOT</version> <!--父工程下的子模块,自动生成--> <modules> <module>springcloud-nacos-7001</module> <module>nacos-config-8001</module> <module>springcloud-nacos-consumer-8080</module> </modules> <!--打包方式:pom--> <packaging>pom</packaging> <!--依赖版本配置--> <properties></properties> <!--依赖管理--> <dependencyManagement> <dependencies> <!-- 对spring-cloud版本统一管理--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.0</version> <type>pom</type> <scope>import</scope> </dependency> <!-- 对spring-boot版本统一管理--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.6.3</version> <type>pom</type> <scope>import</scope> </dependency> <!-- 对spring-cloud-alibaba版本统一管理--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2021.1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
3.2 Nacos Server配置动态变更
-
在父工程下新建Module,命名为nacos-config-8001,并添加依赖(版本继承父依赖版本)
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> </dependencies>
-
Nacos 配置管理 dataId字段格式:$ {prefix}-$ {spring.profiles.active}.$ {file-extension};
- prefix默认为spring.application.name的值,也可以通过spring.cloud.nacos.config.prefix来配置;
- spring.profiles.active为当前环境对应的 profile,当spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension};
- file-exetension为配置内容的数据格式,可以通过spring.cloud.nacos.config.file-extension来配置。目前只支持 properties(默认)和 yaml 类型。
-
在 bootstrap.properties 中配置 Nacos Server 的地址和应用名;
spring.profiles.active=dev #指定开发环境 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 #nacos注册中心地址 spring.application.name=nacos-config #应用名,对应dataId字段的prefix spring.cloud.nacos.config.file-extension=properties #默认就是properties,可不配置,或配置为yaml #dataId的prefix=nacos-config,spring.profiles.active=dev,file-extension=properties,最终dataId=nacos-config-dev.properties spring.cloud.nacos.config.namespace=Public #默认为Public命名空间,可省略 spring.cloud.nacos.config.group=DEFAULT_GROUP #指定配置群组,若是Public命名空间,则可省略
-
Controller层通过原生注解@RefreshScope实现配置自动更新;
@RestController @RequestMapping("/config") @RefreshScope //实现配置的自动更新 public class ConfigController { @Value("${userLocalCache:false}") private boolean useLocalCache; @RequestMapping("/get") public boolean get(){ return useLocalCache; } }
-
发布配置:dataId为nacosConfig.properties,内容为useLocalCache=true;
-
测试:访问http://localhost:8080/config/get,返回结果为true。
3.3 Nacos Server注册与发现
3.3.1创建服务提供者
-
在父工程下新建Module,命名为springcloud-nacos-7001,并添加依赖(版本继承子父依赖版本);
<?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>springcloud</artifactId> <groupId>org.myapps</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springcloud-nacos-7001</artifactId> <!--以下是该Module需要的最少的依赖,可根据情况添加数据库、日志、MyBatis等依赖--> <dependencies> <!--springboot依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--nacos依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </dependency> </dependencies> </project>
-
配置提供者的服务器信息及注册中心信息;
server: port: 7001 #服务提供者的服务器端口号7001 spring: application: name: nacos-server-provider #服务提供者在注册中心的实例名称 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #要注册到注册中心的地址
-
Controller层;
@RestController @RequestMapping("/provider") public class NacosProviderController { //SpringCloud定义了DiscoveryClient接口用于服务发现,可获取注册中心所有的服务实例 @Resource private DiscoveryClient discoveryClient; @GetMapping("/getService") public List<ServiceInstance> getService(){ List<ServiceInstance> list = discoveryClient.getInstances("nacos-server-provider"); return list; } @GetMapping("/get/{text}") public String hello(@PathVariable("text") String text){ return "Welcome to Nacos , "+text; } }
-
启动类添加注解@EnableDiscoveryClient, 用于开启服务注册发现功能;
@SpringBootApplication @EnableDiscoveryClient //开启服务注册发现功能 public class NacosProvider7001 { public static void main(String[] args) { SpringApplication.run(NacosProvider7001.class,args); } }
-
运行启动类,将服务提供者注册到Nacos注册中心,可访问http://localhost:8848/nacos/,查看是否成功注册进服务中心。
3.3.2创建服务消费者
-
在父工程下新建Module,命名为springcloud-nacos-consumer-8080,并添加依赖(继承父依赖版本);
<?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>springcloud</artifactId> <groupId>org.myapps</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springcloud-nacos-consumer-80</artifactId> <!--以下是该Module需要的最少的依赖,可根据情况添加其他依赖--> <dependencies> <!--springboot依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--nacos依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </dependency> </dependencies> </project>
-
配置消费者的服务器信息及注册中心信息;
server: port: 8080 #服务消费者的服务器端口号8080 spring: application: name: nacos-server-consumer #注册中心服务器实例名称 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #要注册到注册中心的地址
-
配置RestTemplateConfig,将RestTemplate交给Bean容器管理;
@Configuration public class RestTemplateConfig { @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
-
Controller层;
@RestController @RequestMapping("/consumer") public class NacosConsumerController { @Resource private RestTemplate restTemplate; //注入RestTemplate @GetMapping("/getService") public List<ServiceInstance> getService(){ return restTemplate.getForObject("http://localhost:7001/provider/getService", List.class); } @GetMapping("/get/{text}") public String hello(@PathVariable("text") String text){ return restTemplate.getForObject("http://localhost:7001/provider/get/" + text, String.class); } }
-
启动类添加注解@EnableDiscoveryClient, 用于开启服务注册发现功能
@SpringBootApplication @EnableDiscoveryClient //开启服务注册发现功能 public class NacosConsumer8080 { public static void main(String[] args) { SpringApplication.run(NacosConsumer8080.class,args); } }
-
运行启动类,将服务消费者注册到Nacos注册中心,可访问http://localhost:8848/nacos/
-
测试:
- 访问http://localhost:8080/consumer/get/1,返回Welcome to Nacos , 1
- 访问http://localhost:8080/consumer/getService,返回注册中心中的服务实例(JSON格式)
【注意】 :测试之前要保证开启Nacos、开启服务提供者和服务消费者。
Nacos服务注册中心为SpringCloud Alibaba中的一个环节,主要用于不同服务之间的解耦,可以将来自不同服务器上的服务都发布到注册中心,满足后并发的需求。
- 点赞
- 收藏
- 关注作者
评论(0)