隨着微服務概念的流行,愈來愈多的公司採用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 發佈!