随着微服务概念的流行,越来越多的公司采用 Spring Cloud
全家桶构建微服务系统,实现业务的快速迭代。 Spring Cloud
提供了快速构建分布式微服务常用组件,包括 Spring Cloud Eureka
、 Spring Cloud Ribbon
、 Spring Cloud Hystrix
、 Spring Cloud Zuul
等等。依赖 Spring
强大生态环境,其已经成为 Java
开发人员构建微服务系统首选解决方案。
本系列文章将带大家认识另一个微服务解决方案 Spring Cloud Alibaba
。依托于 Alibaba
强大的技术支撑,以及 Eureka2.x
不再维护等因素,相信不久的将来 Spring Cloud Alibaba
将会成为大多数公司进行微服务实践的更优选择。
下面向大家介绍 Nacos 的服务注册发现与配置管理功能。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
首先需要下载 Nacos ,下载完成直接解压,接下来启动 Nacos
cd nacos/bin // Linux/Unix/Mac sh startup.sh -m standalone // Windows cmd startup.cmd -m standalone
上面即使用独立的方式启动 Nacos
,启动完成之后访问 Nacos首页 ,默认登录账号和密码都是nacos
登录成功之后,可以看见如下图
接下来创建一个服务注册到 Nacos
pom.xml
如下 <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <modules> <module>service-provider</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.8.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>spring-cloud-alibaba-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>alibaba-demo</name> <packaging>pom</packaging> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version> <spring-cloud-alibaba.version>2.1.1.RELEASE</spring-cloud-alibaba.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
service-provider
, pom.xml
如下 <?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>spring-cloud-alibaba-demo</artifactId> <groupId>com.example</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>service-provider</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
service-provider
模块中添加 bootstrap.yml
配置文件,文件内容如下: spring: cloud: nacos: discovery: server-addr: 127.0.0.1:8848 application: name: service-provider main: allow-bean-definition-overriding: true server: port: 8080
上面的配置指定了服务注册发现地址
@EnableDiscoveryClient @SpringBootApplication public class ServiceProviderApplication { public static void main(String[] args) { SpringApplication.run(ServiceProviderApplication.class, args); } }
然后启动 service-provider
,即可在 Nacos
的服务列表中观察到已经注册上去的服务
通过 Nacos
提供的 Open-API 可以看到已经注册的服务列表
➜ ~ curl -X GET '127.0.0.1:8848/nacos/v1/ns/service/list?pageNo=1&pageSize=10' {"count":1,"doms":["service-provider"]}% ➜ ~
到此已经完成的服务注册的基本使用,接下来介绍配置管理的使用
为了方便,我直接对 service-provider
项目进行改造演示
pom.xml
文件 <?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>spring-cloud-alibaba-demo</artifactId> <groupId>com.example</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>service-provider</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
新增了 spring-cloud-starter-alibaba-nacos-config
依赖
bootstrap.yml
spring: cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: ${spring.cloud.nacos.discovery.server-addr} application: name: service-provider main: allow-bean-definition-overriding: true server: port: 8080
上面的配置指定配置管理服务地址
@RefreshScope @RestController @EnableDiscoveryClient @SpringBootApplication public class ServiceProviderApplication { @Value("${config.test}") private String testConfigValue; @GetMapping("/config") public String getConfigValue() { return testConfigValue; } public static void main(String[] args) { SpringApplication.run(ServiceProviderApplication.class, args); } }
添加 @RefreshScope
是支持动态配置更新
Nacos
配置文件
然后启动项目观察控制台日志输出
2019-12-01 15:44:39.097 INFO 19295 --- [ main] c.a.c.n.c.NacosPropertySourceBuilder : Loading nacos data, dataId: 'service-provider.properties', group: 'DEFAULT_GROUP', data: config.test=这是一个测试值
可以看到本地服务已经获取到 Nacos
配置管理中的数据了。尝试通过接口访问数据
➜ ~ curl -X GET '127.0.0.1:8080/config' 这是一个测试值% ➜ ~
正确获取到配置数据,接下来尝试修改配置数据
查看控制台日志
2019-12-01 15:47:25.694 INFO 19295 --- [-127.0.0.1_8848] o.s.c.e.event.RefreshEventListener : Refresh keys changed: [config.test]
说明已经修改成功,服务同步到最新的配置了。尝试通过接口访问数据
➜ ~ curl -X GET '127.0.0.1:8080/config' 这是一个测试值-修改后% ➜ ~
配置动态更新也已经生效。 项目源码
本文由博客一文多发平台 OpenWrite 发布!