随着微服务概念的流行,愈来愈多的公司采用Spring Cloud
全家桶构建微服务系统,实现业务的快速迭代。Spring Cloud
提供了快速构建分布式微服务经常使用组件,包括Spring Cloud Eureka
、Spring Cloud Ribbon
、Spring Cloud Hystrix
、Spring Cloud Zuul
等等。依赖Spring
强大生态环境,其已经成为Java
开发人员构建微服务系统首选解决方案。html
本系列文章将带你们认识另外一个微服务解决方案Spring Cloud Alibaba
。依托于Alibaba
强大的技术支撑,以及Eureka2.x
再也不维护等因素,相信不久的未来Spring Cloud Alibaba
将会成为大多数公司进行微服务实践的更优选择。java
下面向你们介绍Nacos的服务注册发现与配置管理功能。git
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。github
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。web
首先须要下载Nacos,下载完成直接解压,接下来启动Nacos
spring
cd nacos/bin // Linux/Unix/Mac sh startup.sh -m standalone // Windows cmd startup.cmd -m standalone
上面即便用独立的方式启动Nacos
,启动完成以后访问Nacos首页,默认登陆帐号和密码都是nacosapache
登陆成功以后,能够看见以下图
bootstrap
接下来建立一个服务注册到Nacos
api
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
上面的配置指定了服务注册发现地址bash
@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 发布!