Spring Cloud 提供了一個(gè)部署微服務(wù)的平臺,包括了微服務(wù)中常見的組件:配置中心服務(wù), API網(wǎng)關(guān),斷路器,服務(wù)注冊與發(fā)現(xiàn),分布式追溯,OAuth3,消費(fèi)者驅(qū)動合約等。我們不必先知道每個(gè)組件有什么作用,隨著教程的深入,我們會逐漸接觸到它們。一個(gè)分布式服務(wù)大體結(jié)構(gòu)見下圖(圖片來自于:spring.io):
站在用戶的角度思考問題,與客戶深入溝通,找到明溪網(wǎng)站設(shè)計(jì)與明溪網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋明溪地區(qū)。使用Spring Cloud搭建分布式的系統(tǒng)十分簡單,我們只需要幾行簡單的配置就能啟動一系列的組件,然后可以在代碼中控制、使用和管理這些組件。Spring Cloud使用Spring Boot作為基礎(chǔ)框架,可以參考我的上一篇博客介紹如何創(chuàng)建一個(gè)Spring Boot項(xiàng)目, Spring Boot 2.0.1 入門教程。本教程將教大家如何配置服務(wù)中心服務(wù),并通過web客戶端讀取配置。
Gitee碼云
首先用IntelliJ創(chuàng)建一個(gè)Maven項(xiàng)目,pom.xml文件內(nèi)容如下:
4.0.0
cn.zxuqian
web
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
org.springframework.cloud
spring-cloud-starter-config
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-dependencies
Finchley.M9
pom
import
1.8
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/libs-milestone
false
dependencyManagement
可以為所有的依賴指定統(tǒng)一的版本號,這里的Spring-cloud依賴版本均為Finchley.M9,然后使用repository
指定此版本的倉庫。spring-cloud-starter-config
提供了訪問配置中心服務(wù)的API接口。新建一個(gè)控制器類 cn.zxuqian.controllers.HelloController
, 并添加如下代碼:
package cn.zxuqian.controllers;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RefreshScope
@RestController
public class HelloController {
@Value("${message: 本地消息}")
private String message;
@RequestMapping("/message")
public String message() {
return this.message;
}
}
一個(gè)簡單的控制器,匹配/message
路徑,并返回message
變量的值。這里先不用管 @RefreshScope
這個(gè)注解,等下會用到時(shí)再講。@Value
會取來自配置中心服務(wù)的配置項(xiàng),或本地環(huán)境變量等等,此處取了配置中心的message
的值,并給了它一個(gè)默認(rèn)值"本地消息",即如果遠(yuǎn)程配置中心不可用時(shí),此變量將會用默認(rèn)值初始化。
我們需要在web客戶端項(xiàng)目完全啟動之前去加載配置中心的配置項(xiàng),所以需要在src/main/resources
下創(chuàng)建bootstrap.yml
文件,然后指定此客戶端的名字和遠(yuǎn)程配置中心的uri:
spring:
application:
name: web-client
cloud:
config:
uri: http://localhost:8888
yml相比properties文件更加簡潔,不用寫很多重復(fù)的前綴,上邊的內(nèi)容可以轉(zhuǎn)換為對應(yīng)的properties:
spring.application.name=web-client
spring.cloud.config.uri=http://localhost:8888
spring.application.name
指定了此項(xiàng)目的名字,用來取配置中心相同文件名的配置文件,即配置中心應(yīng)有一文件名為web-client.yml
的配置文件。spring.cloud.config.uri
指定了遠(yuǎn)程配置中心服務(wù)的uri地址,默認(rèn)為http://localhost:8888新建一個(gè)Maven項(xiàng)目,使用如下pom配置:
4.0.0
cn.zxuqian
config-server
1.0-SNAPSHOT
jar
org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
UTF-8
1.8
org.springframework.cloud
spring-cloud-config-server
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
Finchley.M9
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/libs-milestone
false
spring-cloud-config-server
即為配置中心服務(wù)的核心依賴。
新建一個(gè)Java類cn.zxuqian.Application
,添加如下代碼:
package cn.zxuqian;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@EnableConfigServer
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@EnableConfigServer
這一條注解即可把該Maven項(xiàng)目作為配置中心服務(wù)啟動。配置中心的文件都是基于版本控制的,所以需要在本地新建一個(gè)git倉庫來保存配置文件。或者也可用公共遠(yuǎn)程git倉庫,github, 碼云等。在任意位置(如項(xiàng)目的上級目錄)創(chuàng)建一空白文件夾,這里叫做config
,可以使用任何名字。然后進(jìn)入此文件夾下,運(yùn)行
$ git init
來初始化git倉庫,然后新建一個(gè)文件,名為web-client.yml
,并添加如下內(nèi)容:
message: 此條消息來自于cofig server
注意此文件名需要和之前在web項(xiàng)目中配置的spring.application.name
保持一致。這個(gè)文件的內(nèi)容就是web客戶端要獲取的message的值。創(chuàng)建完成之后,運(yùn)行如下git命令提交到本地倉庫:
$ git add web-client.yml
$ git commit -m "added web-client.yml"
我們需要為配置中心指定上述創(chuàng)建的git倉庫地址。在src/main/resources
下創(chuàng)建applicaiton.yml
文件,提供如下內(nèi)容:
server:
port: 8888
spring:
cloud:
config:
server:
git:
uri: ${HOME}/development/codes/backend/gitee/config
此文件指定了配置中心服務(wù)的端口號,和保存配置文件的git倉庫目錄,如果是遠(yuǎn)程倉庫,可以直接指定url地址。到此,配置中心服務(wù)創(chuàng)建完成。
首先啟動配置中心服務(wù),使用spring-boot maven插件:spring-boot:run。啟動成功后再啟動web客戶端,訪問http://localhost:8080/message
,如果看到此條消息來自于cofig server
即配置成功。然后關(guān)閉配置中心服務(wù),再重啟web客戶端,訪問http://localhost:8080/message
,我們就會看到本地消息
。
那么每次配置更新后都要重啟是不是很麻煩?Spring boot提供了spring-boot-starter-actuator
組件,用來進(jìn)行生產(chǎn)環(huán)境的維護(hù),如檢查健康信息等。還記得上面HelloController
的@RefreshScope
注解嗎?使用它我們可以動態(tài)的加載配置中心修改后的配置。然后我們還需要在配置中心的web-client.yml
添加如下內(nèi)容用以暴露acurator的/refresh
終端api。
message: 此條消息來自于cofig server
management:
endpoints:
web:
exposure:
include: "*"
更新完成后提交的git倉庫,然后重啟配置中心服務(wù)和web客戶端。修改message為
message: 更新:此條消息來自于cofig server
然后發(fā)送一個(gè)空的post請求到/refresh
$ curl http://localhost:8080/actuator/refresh -d {} -H "Content-Type: application/json"
之后刷新頁面,即可看到更新后的消息。
現(xiàn)在我們搭建好了一個(gè)配置中心服務(wù),它是根據(jù)每個(gè)組件的spring.application.name
來決定讀取哪個(gè)配置文件,然后我們用了acurator的/refresh
api在運(yùn)行時(shí)刷新配置項(xiàng)。另外配置項(xiàng)都是基于版本控制的,可以方便的進(jìn)行還原和更新。通過這個(gè)教程可以看到Spring Cloud的各組件的配置相當(dāng)簡單,基本就只用一條注解就可以創(chuàng)建一個(gè)完整的服務(wù)組件。
歡迎訪問我的博客原文:Spring Cloud 入門教程 - 搭建配置中心服務(wù)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。