Spring Cloud(九)高可用的分散式配置中心 Spring Cloud Config 整合 Eureka 服務

搜雲庫技術團隊發表於2019-02-17

上一篇文章,講了SpringCloudConfig 整合Git倉庫,這一篇我們講一下SpringCloudConfig 配和 Eureka 註冊中心一起使用

在分散式系統中,由於服務數量巨多,為了方便服務配置檔案統一管理,實時更新,所以需要分散式配置中心元件。在Spring Cloud中,有分散式配置中心元件spring cloud config ,它支援配置服務放在配置服務的記憶體中(即本地),也支援放在遠端Git倉庫中。在spring cloud config 元件中,分兩個角色,一是config server,二是config client,業界也有些知名的同類開源產品,比如百度的disconf

相比較同類產品,SpringCloudConfig最大的優勢是和Spring無縫整合,支援Spring裡面Environment和PropertySource的介面,對於已有的pring應用程式的遷移成本非常低,在配置獲取的介面上是完全一致,結合SpringBoot可使你的專案有更加統一的標準(包括依賴版本和約束規範),避免了應為整合不同開軟體源造成的依賴版本衝突。

準備工作

我們先拿之前的程式碼為基礎,進行下面的操作

Spring Cloud(四) 服務提供者 Eureka + 服務消費者 Feign

www.ymq.io/2017/12/06/…

Eureka Service

匯入第四篇文章中的專案:作為服務註冊中心

spring-cloud-eureka-service

Eureka Provider

匯入第四篇文章中的專案:作為服務的提供者

spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3

Eureka Consumer

匯入第四篇文章中的專案:作為服務的消費者

spring-cloud-feign-consumer

服務端配置

Config Server

複製上一篇的專案 spring-cloud-config-server,新增 eureka依賴

github.com/souyunku/sp…

新增依賴

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
複製程式碼

開啟服務註冊

在程式的啟動類 ConfigServerApplication.java 通過 @EnableEurekaClient 開啟 Eureka 提供者服務

package io.ymq.example.config.server;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@EnableConfigServer
@EnableEurekaClient
@SpringBootApplication
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}
複製程式碼

修改配置

修改配置檔案 application.properties ,新增 eureka 註冊中心地址 http://localhost:8761/eureka/

spring.application.name=config-server
server.port=8888
spring.cloud.config.label=master
spring.cloud.config.server.git.uri=https://github.com/souyunku/spring-cloud-config.git
spring.cloud.config.server.git.search-paths=spring-cloud-config
#spring.cloud.config.server.git.username=your username
#spring.cloud.config.server.git.password=your password

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
複製程式碼
  • spring.cloud.config.server.git.uri:配置git倉庫地址

  • spring.cloud.config.server.git.searchPaths:配置倉庫路徑

  • spring.cloud.config.label:配置倉庫的分支

  • spring.cloud.config.server.git.username:訪問git倉庫的使用者名稱

  • spring.cloud.config.server.git.password:訪問git倉庫的使用者密碼

  • eureka.client.serviceUrl.defaultZone:eureka註冊中心地址

Git倉庫如果是私有倉庫需要填寫使用者名稱密碼,示例是公開倉庫,所以不配置密碼。

遠端Git倉庫

spring-cloud-config 資料夾下有 application-dev.properties,application-test.properties 三個檔案,內容依次是:content=hello dev,content=hello test,content=hello pre

遠端Git倉庫

測試服務

啟動程式 ConfigServerApplication

訪問 Config Server 服務:http://localhost:8888/springCloudConfig/dev/master

{
    "name": "springCloudConfig",
    "profiles": [
        "dev"
    ],
    "label": "master",
    "version": "b6fbc2f77d1ead41d5668450e2601a03195eaf16",
    "state": null,
    "propertySources": [
        {
            "name": "https://github.com/souyunku/spring-cloud-config.git/application-dev.properties",
            "source": {
                "content": "hello dev"
            }
        }
    ]
}
複製程式碼

證明配置服務中心可以從遠端程式獲取配置資訊。

http請求地址和資原始檔對映如下:

  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties

客戶端端配置

config Client Eureka

修改已經匯入的,第四篇文章中的專案:配置客戶端的一些配置

spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3

新增依賴

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-config-client</artifactId>
</dependency>
複製程式碼

開啟服務註冊

在程式的啟動類 EurekaProviderApplication ,通過 @Value 獲取服務端的 content 值的內容

package io.ymq.example.eureka.provider;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaProviderApplication {

    @Value("${content}")
    String content;

    @Value("${server.port}")
    String port;

    @RequestMapping("/")
    public String home() {
        return "Hello world ,port:" + port+",content="+content;
    }

    public static void main(String[] args) {
        SpringApplication.run(EurekaProviderApplication.class, args);
    }
}
複製程式碼

新增配置

修改配置檔案 application.properties 新增 Eureka 註冊中心,配置從springCloudConfig 配置中心讀取配置,指定springCloudConfigService 服務名稱

spring.application.name=eureka-provider
server.port=8081

spring.cloud.config.label=master
spring.cloud.config.profile=dev
#spring.cloud.config.uri=http://localhost:8888/

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
複製程式碼
  • spring.cloud.config.label 指明遠端倉庫的分支

  • spring.cloud.config.profile

  • dev開發環境配置檔案

  • test測試環境

  • pro正式環境

  • #spring.cloud.config.uri= http://localhost:8888/ 指明配置服務中心的網址**(註釋掉)**

  • spring.cloud.config.discovery.enabled=true 是從配置中心讀取檔案。

  • spring.cloud.config.discovery.serviceId=config-server 配置中心的servieId,服務名稱,通過服務名稱去 Eureka註冊中心找服務

測試服務

依次啟動專案:

spring-cloud-eureka-service
spring-cloud-config-server
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
spring-cloud-feign-consumer

啟動該工程後,訪問服務註冊中心,檢視服務是否都已註冊成功:http://localhost:8761/

檢視各個服務註冊狀態

檢視 eureka 監控,看服務是否都註冊成功

命令視窗,通過curl http://127.0.0.1:9000/hello 訪問服務,或者在瀏覽器訪問http://127.0.0.1:9000/hello F5 重新整理

訪問服務

修改了Git倉庫的配置後,需要重啟服務,才可以得到最新的配置,下一篇講怎麼解決配置的更新

原始碼下載

GitHub:github.com/souyunku/sp…

碼雲:gitee.com/souyunku/sp…

Contact

  • 作者:鵬磊
  • 出處:www.ymq.io
  • Email:admin@souyunku.com
  • 版權歸作者所有,轉載請註明出處
  • Wechat:關注公眾號,搜雲庫,專注於開發技術的研究與知識分享
關注公眾號-搜雲庫
搜雲庫

相關文章