本篇笔记是我根据SpringCloud Alibaba Nacos官方文档学习整理而来,主要是对Nacos注册中心的部署、Nacos Server的动态配置及Nacos Server的服务注册与发现的一个官方Demo的学习,Demo很简单,主要是为了先搭建我的第一个微服务工程,若是也有在自学微服务的码友,可以互勉,互相进步!
Nacos官方文档地址:https://nacos.io/zh-cn/docs/quick-start.html
1.下载最新的Nacos:
2.解压nacos-server-1.4.3.tar.gz:tar -xvf nacos-server-$version.tar.gz
3. 进入解压后的bin文件夹中并执行启动命令:cd nacos/bin
sh startup.sh -m standalone
或 bash startup.sh -m standalone
startup.cmd -m standalone
4.测试:访问http://localhost:8848/nacos/,进入Nacos 注册中心页面,用户名密码均为nacos
5. 关闭nacos注册中心:Linux:sh shutdown.sh
Windows:shutdown.cmd
【注意】 :
主要从以下两个方面来演示:
<?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>
<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>
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命名空间,则可省略
@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。
<?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 #要注册到注册中心的地址
@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;
}
}
@SpringBootApplication
@EnableDiscoveryClient //开启服务注册发现功能
public class NacosProvider7001 {
public static void main(String[] args) {
SpringApplication.run(NacosProvider7001.class,args);
}
}
<?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 #要注册到注册中心的地址
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
@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);
}
}
@SpringBootApplication
@EnableDiscoveryClient //开启服务注册发现功能
public class NacosConsumer8080 {
public static void main(String[] args) {
SpringApplication.run(NacosConsumer8080.class,args);
}
}
【注意】 :测试之前要保证开启Nacos、开启服务提供者和服务消费者。
Nacos服务注册中心为SpringCloud Alibaba中的一个环节,主要用于不同服务之间的解耦,可以将来自不同服务器上的服务都发布到注册中心,满足后并发的需求。