Spring Cloud(九)高可用的分布式配置中心 Spring Cloud Config 集成 Eureka 服務(wù)

2019-04-17 13:58 更新

上一篇文章,講了SpringCloudConfig 集成Git倉(cāng)庫(kù),這一篇我們講一下SpringCloudConfig 配和 Eureka 注冊(cè)中心一起使用

在分布式系統(tǒng)中,由于服務(wù)數(shù)量巨多,為了方便服務(wù)配置文件統(tǒng)一管理,實(shí)時(shí)更新,所以需要分布式配置中心組件。在Spring Cloud中,有分布式配置中心組件spring cloud config ,它支持配置服務(wù)放在配置服務(wù)的內(nèi)存中(即本地),也支持放在遠(yuǎn)程Git倉(cāng)庫(kù)中。在spring cloud config 組件中,分兩個(gè)角色,一是config server,二是config client,業(yè)界也有些知名的同類(lèi)開(kāi)源產(chǎn)品,比如百度的disconf

相比較同類(lèi)產(chǎn)品,SpringCloudConfig最大的優(yōu)勢(shì)是和Spring無(wú)縫集成,支持Spring里面Environment和PropertySource的接口,對(duì)于已有的pring應(yīng)用程序的遷移成本非常低,在配置獲取的接口上是完全一致,結(jié)合SpringBoot可使你的項(xiàng)目有更加統(tǒng)一的標(biāo)準(zhǔn)(包括依賴(lài)版本和約束規(guī)范),避免了應(yīng)為集成不同開(kāi)軟件源造成的依賴(lài)版本沖突。

準(zhǔn)備工作

我們先拿之前的代碼為基礎(chǔ),進(jìn)行下面的操作

Spring Cloud(四) 服務(wù)提供者 Eureka + 服務(wù)消費(fèi)者 Feign

http://www.ymq.io/2017/12/06/spring-cloud-feign/

Eureka Service

導(dǎo)入第四篇文章中的項(xiàng)目:作為服務(wù)注冊(cè)中心

spring-cloud-eureka-service

Eureka Provider

導(dǎo)入第四篇文章中的項(xiàng)目:作為服務(wù)的提供者

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

Eureka Consumer

導(dǎo)入第四篇文章中的項(xiàng)目:作為服務(wù)的消費(fèi)者

spring-cloud-feign-consumer

服務(wù)端配置

Config Server

復(fù)制上一篇的項(xiàng)目 spring-cloud-config-server,添加 eureka依賴(lài)

https://github.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-config/

添加依賴(lài)

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

開(kāi)啟服務(wù)注冊(cè)

在程序的啟動(dòng)類(lèi) ConfigServerApplication.java 通過(guò) @EnableEurekaClient 開(kāi)啟 Eureka 提供者服務(wù)

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 注冊(cè)中心地址 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倉(cāng)庫(kù)地址
  • spring.cloud.config.server.git.searchPaths:配置倉(cāng)庫(kù)路徑
  • spring.cloud.config.label:配置倉(cāng)庫(kù)的分支
  • spring.cloud.config.server.git.username:訪(fǎng)問(wèn)git倉(cāng)庫(kù)的用戶(hù)名
  • spring.cloud.config.server.git.password:訪(fǎng)問(wèn)git倉(cāng)庫(kù)的用戶(hù)密碼

  • eureka.client.serviceUrl.defaultZone:eureka注冊(cè)中心地址

Git倉(cāng)庫(kù)如果是私有倉(cāng)庫(kù)需要填寫(xiě)用戶(hù)名密碼,示例是公開(kāi)倉(cāng)庫(kù),所以不配置密碼。

遠(yuǎn)程Git倉(cāng)庫(kù)

spring-cloud-config 文件夾下有 application-dev.properties,application-test.properties 三個(gè)文件,內(nèi)容依次是:content=hello dev,content=hello test,content=hello pre

遠(yuǎn)程Git倉(cāng)庫(kù)

測(cè)試服務(wù)

啟動(dòng)程序 ConfigServerApplication 類(lèi)

訪(fǎng)問(wèn) Config Server 服務(wù):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"
            }
        }
    ]
}

證明配置服務(wù)中心可以從遠(yuǎn)程程序獲取配置信息。

http請(qǐng)求地址和資源文件映射如下:

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

客戶(hù)端端配置

config Client Eureka

修改已經(jīng)導(dǎo)入的,第四篇文章中的項(xiàng)目:配置客戶(hù)端的一些配置

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

添加依賴(lài)

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
</dependency>

開(kāi)啟服務(wù)注冊(cè)

在程序的啟動(dòng)類(lèi) EurekaProviderApplication ,通過(guò) @Value 獲取服務(wù)端的 content 值的內(nèi)容

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 注冊(cè)中心,配置從springCloudConfig 配置中心讀取配置,指定springCloudConfigService 服務(wù)名稱(chēng)

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 指明遠(yuǎn)程倉(cāng)庫(kù)的分支
  • spring.cloud.config.profile
  • dev開(kāi)發(fā)環(huán)境配置文件
  • test測(cè)試環(huán)境
  • pro正式環(huán)境
  • #spring.cloud.config.uri= http://localhost:8888/ 指明配置服務(wù)中心的網(wǎng)址(注釋掉)

  • spring.cloud.config.discovery.enabled=true 是從配置中心讀取文件。
  • spring.cloud.config.discovery.serviceId=config-server 配置中心的servieId,服務(wù)名稱(chēng),通過(guò)服務(wù)名稱(chēng)去 Eureka注冊(cè)中心找服務(wù)

    測(cè)試服務(wù)

依次啟動(dòng)項(xiàng)目:

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

啟動(dòng)該工程后,訪(fǎng)問(wèn)服務(wù)注冊(cè)中心,查看服務(wù)是否都已注冊(cè)成功:http://localhost:8761/

查看各個(gè)服務(wù)注冊(cè)狀態(tài)

查看 eureka 監(jiān)控,看服務(wù)是否都注冊(cè)成功

命令窗口,通過(guò)curl http://127.0.0.1:9000/hello 訪(fǎng)問(wèn)服務(wù),或者在瀏覽器訪(fǎng)問(wèn)http://127.0.0.1:9000/hello F5 刷新

查看各個(gè)服務(wù)注冊(cè)狀態(tài)

修改了Git倉(cāng)庫(kù)的配置后,需要重啟服務(wù),才可以得到最新的配置,下一篇講怎么解決配置的更新

源碼下載

GitHub:https://github.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-config-eureka

碼云:https://gitee.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-config-eureka

Contact

  • 作者:鵬磊
  • 出處:http://www.souyunku.com
  • Email:admin@souyunku.com
  • 版權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)注明出處
  • Wechat:關(guān)注公眾號(hào),搜云庫(kù)技術(shù)團(tuán)隊(duì),專(zhuān)注于開(kāi)發(fā)技術(shù)的研究與知識(shí)分享

    關(guān)注公眾號(hào)-搜云庫(kù)

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)