Spring Cloud(十)高可用的分布式配置中心 Spring Cloud Config 中使用 Refresh

2019-04-17 14:01 更新

上一篇文章講了SpringCloudConfig 集成Git倉庫,配和 Eureka 注冊(cè)中心一起使用,但是我們會(huì)發(fā)現(xiàn),修改了Git倉庫的配置后,需要重啟服務(wù),才可以得到最新的配置,這一篇我們嘗試使用 Refresh 實(shí)現(xiàn)主動(dòng)獲取 Config Server 配置服務(wù)中心的最新配置

準(zhǔn)備工作

把上一篇,示例代碼下載,才可以進(jìn)行一下的操作,下載地址在文章末尾

  • 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

Config Client

修改第九篇文章項(xiàng)目

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

    添加依賴

<!-- actuator 監(jiān)控 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

安全認(rèn)證

application.properties 添加以下配置.關(guān)閉安全認(rèn)證

#關(guān)閉刷新安全認(rèn)證
management.security.enabled=false

值是false的話,除開health接口還依賴endpoints.health.sensitive的配置外,其他接口都不需要輸入用戶名和密碼了

開啟 refresh

在程序的啟動(dòng)類 EurekaProviderApplication 通過 @RefreshScope 開啟 SpringCloudConfig 客戶端的 refresh 刷新范圍,來獲取服務(wù)端的最新配置,@RefreshScope要加在聲明@Controller聲明的類上,否則refresh之后Conroller拿不到最新的值,會(huì)默認(rèn)調(diào)用緩存。

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.context.config.annotation.RefreshScope;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RefreshScope
@RestController
@EnableEurekaClient
@SpringBootApplication
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);
    }
}

測(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)該工程后,訪問服務(wù)注冊(cè)中心,查看服務(wù)是否都已注冊(cè)成功:http://localhost:8761/

查看服務(wù)注冊(cè)情況

修改Git倉庫

修改Git倉庫配置,在 content=hello dev 后面加個(gè) 123456

修改Git倉庫

訪問服務(wù)

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

發(fā)現(xiàn)沒有得到最新的值

訪問服務(wù)

刷新配置

通過 Postman 發(fā)送 POST請(qǐng)求到:http://localhost:8081/refresh,http://localhost:8083/refresh,我們可以看到以下內(nèi)容:

刷新配置

訪問服務(wù)

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

發(fā)現(xiàn):服務(wù)8082 沒有刷新到最新配置 因?yàn)闆]有手動(dòng)觸發(fā)更新

訪問服務(wù)

源碼下載

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

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

下篇預(yù)告

留了一個(gè)懸念,Config Client 實(shí)現(xiàn)配置的實(shí)時(shí)更新,我們可以使用 /refresh 接口觸發(fā),如果所有配置的更改,都需要手動(dòng)觸發(fā),那豈不是維護(hù)成本很高,而使用 Spring Cloud Bus 消息總線實(shí)現(xiàn)方案,可以優(yōu)雅的解決以上問題,下篇文章我們講Spring Cloud Bus 的使用,關(guān)注下文章末尾公眾號(hào),支持下作者,感謝

Contact

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

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

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)