Spring Cloud Alibaba基礎教程:Nacos服務發現與配置管理
隨著微服務概念的流行,越來越多的公司採用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 釋出!