亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

利用Spring Cloud Config結合Bus實現(xiàn)分布式配置中心的步驟

 更新時間:2018年05月06日 11:07:52   作者:Sam哥哥  
這篇文章主要介紹了利用Spring Cloud Config結合Bus實現(xiàn)分布式配置中心的相關資料,文中通過示例代碼將實現(xiàn)的步驟一步步介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友下面來一起看看吧

概述

假設現(xiàn)在有個需求:

我們的應用部署在10臺機器上,當我們調整完某個配置參數(shù)時,無需重啟機器,10臺機器自動能獲取到最新的配置。
如何來實現(xiàn)呢?有很多種,比如:

1、將配置放置到一個數(shù)據(jù)庫里面,應用每次讀取配置都是直接從DB讀取。這樣的話,我們只需要做一個DB變更,把最新的配置信息更新到數(shù)據(jù)庫即可。這樣無論多少臺應用,由于都從同一個DB獲取配置信息,自然都能拿到最新的配置。

2、每臺機器提供一個更新配置信息的updateConfig接口,當需要修改配置時,挨個調用服務器的updateConfig接口。

3、借助redis來實現(xiàn),把配置信息放置到redis上,但是這樣子,就每次都得去redis讀取,多了一些網絡請求。

上面這三種方法是最容易想到的,也很容易做,但是缺點當然也非常的多。雖說缺點很多,但是某些傳統(tǒng)企業(yè)還真是這么干的。

在互聯(lián)網企業(yè)里,基本沒見過這么玩的,都是會使用分布式配置中心。用開源的或者自己實現(xiàn),目前開源的分布式配置中心有很多,而spring cloud config就是其中的佼佼者。下面我們就用spring cloud config來實現(xiàn)一個分布式配置中心。

是否使用最新的Spring Boot 2.0 版本

我曾經使用最新的spring cloud 2.0做了一個分布式是配置中心的demo。原本以為很簡單,但是居然足足花了一天才搞定。有以下幾個原因:

1、spring cloud對應的文檔沒有完全更新,出了問題,在文檔里找不著;

2、目前使用2.0版本的公司很少,網上也沒什么具體實戰(zhàn)文章介紹。出了問題后,百度是找不到解決方案的。而google也基本很難找到方案,都是一些零星的知識碎片;

3、2.0這個版本,config和bus這塊有些小變動,如果還按照1.5.x的版本來弄的話,是行不通的。

基于上面幾個原因,建議使用1.5.x的版本靠譜些。下面這篇文章會以下面的版本來介紹的:

spring boot:

1.5.2.RELEASE

對應的spring cloud使用:

Dalston.RELEASE

搭建spring cloud config server

如果你只是想把配置統(tǒng)一由spring cloud config來管理,而暫時不想做配置中心的高可用的話,則只需要config和bus兩個組件就夠了。但是如果要保證高可用,還得使用spring cloud的注冊發(fā)現(xiàn)組件。

除了config和bus之外,我們還需要使用git。因為spring cloud config是使用git來做版本管理的。

基于spring cloud config做一個配置中心,很簡單,只要幾個小步驟就搞定了。

【1】引入config和bus組件

<dependency>
<groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-config-server</artifactId>
 </dependency>
 <dependency>
<groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

【2】啟動類使用@EnableConfigServer注解

package spring.cloud.config;

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

@EnableConfigServer
@SpringBootApplication
public class ConfigApplication {
 public static void main(String[] args) {
 SpringApplication.run(ConfigApplication.class, args);
 }
}

【3】application.yml文件配置rabbitmq和git倉庫

server:
 port: 8040
spring:
 application:
 name: spring-cloud-config-server
 cloud:
 config:
 server:
 git:
  uri: https://gitlab.xxxxxx.com/config/xxxxxxx.git
  search-paths:
  username: xxxxx
  password: xxxxxx
 activemq:
 host: 127.0.0.1
 port: 5672
 username: guest
 password: guest
management:
 security:
 enabled: false

配置RabbitMQ是因為bus組件需要使用它來通知客戶端,配置有變動。另外,記得使用

management:
 security:
 enabled: false

將驗證關閉掉,不然后面的操作,老是報授權錯誤。

到此服務端配置中心已經搞定了?,F(xiàn)在你就可以在服務端先做個小實驗,提交一個demo-dev.properties文件,文件的內容如下:

address=hello

然后使用

http://localhost:8040/demo/dev

如果能輸出

{“address”:”hello”}

就說明spring cloud config跟git的交互是ok的。

客戶端接入配置中心

我們的目標:

當把配置信息修改完提交到git上后,所有接入到spring cloud config的客戶端馬上能收到通知,并且拿到最新的配置信息。
下面介紹如何實現(xiàn)這個目標。

客戶端只需要做幾個小步驟即可完成接入動作。

【1】引入依賴

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-config</artifactId>
 </dependency>

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

引入spring-boot-starter-web只是為了做實驗而已。

【2】配置RabbitMQ和引入配置中心的url

application.properties

spring.application.name=spring-cloud-config-client1
server.port=8042
management.security.enabled=false
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

bootstrap.properties

spring.cloud.config.name=demo
spring.cloud.config.profile=dev
spring.cloud.config.label=master
spring.cloud.config.uri=http://localhost:8040/

有三個注意點:

1、關閉驗證:management.security.enabled=false

2、spring cloud config相關的配置一定一定要放到bootstrap.properties里

3、使用spring.cloud.config.uri指定配置中心的地址

另外,對于客戶端來說,啟動類是不用加上任何跟config和bus有關的注解的

到此客戶端搞定了,我們可以使用一個controller來開始做實驗了。

package springcloudconfig.client;
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;
@RestController
@RefreshScope
public class HelloController {
 @Value("${address}")
 private String address;
 @RequestMapping("/address")
 public String getAddress() {
 return this.address;
 }
}

假設上面的HelloController需要用到address這個配置,只需要使用@RefreshScope和@value注解就可以了

@RefreshScope
public class HelloController {}
 @Value("${address}")
 private String address;

為了驗證客戶端是否能拿到最新的配置信息,提供一個

@RequestMapping("/address")
 public String getAddress() {
 return this.address;
 }

方法。

我們修改一下demo-dev.properties文件,將值改成

address=hello update

并提交到git上。這個時候我們調用getAddress接口

http://localhost:8041/address

發(fā)現(xiàn)并沒有拿到最新的值。那是因為push到git的這個動作做完后,我們沒有通知到spring cloud bus??梢允褂胮ostman來做一個post請求,調用如下接口,來通知bus。

http://localhost:8040/bus/refresh

這個接口一旦調用成功,bus會利用RabbitMQ通知所有的客戶端,配置已經更新。

特別注意:

我們是調用服務端的/bus/refresh接口,不是去調用客戶端的/bus/refresh接口。

如果每次提交,都要去調用服務端的/bus/refresh接口,那這個也太麻煩了??梢允褂脀ebhook來幫一下忙。

如果你們用的是新的gitlab,那么只需要在工程里面,點擊【Settings】,再點擊【Integrations】,就可以設置webhook了,如下圖:

url里面填入配置中心服務端的/bus/refresh接口地址,然后點擊【添加Webhook】就可以了。

與攜程的阿波羅對比

Spring Cloud Config的精妙之處在于它的配置存儲于Git,這就天然的把配置的修改、權限、版本等問題隔離在外。通過這個設計使得Spring Cloud Config整體很簡單,不過也帶來了一些不便之處。

下面嘗試做一個簡單的小結:

功能點 Apollo Spring Cloud Config 備注
配置界面 一個界面管理不同環(huán)境、不同集群配置 無,需要通過git操作
配置生效時間 實時 重啟生效,或手動refresh生效 Spring Cloud Config需要通過Git webhook,加上額外的消息隊列才能支持實時生效
版本管理 界面上直接提供發(fā)布歷史和回滾按鈕 無,需要通過git操作
灰度發(fā)布 支持 不支持
授權、審核、審計 界面上直接支持,而且支持修改、發(fā)布權限分離 需要通過git倉庫設置,且不支持修改、發(fā)布權限分離
實例配置監(jiān)控 可以方便的看到當前哪些客戶端在使用哪些配置 不支持
配置獲取性能 快,通過數(shù)據(jù)庫訪問,還有緩存支持 較慢,需要從git clone repository,然后從文件系統(tǒng)讀取
客戶端支持 原生支持所有Java和.Net應用,提供API支持其它語言應用,同時也支持Spring annotation獲取配置 支持Spring應用,提供annotation獲取配置 Apollo的適用范圍更廣一些

我個人還是推薦使用Spring Cloud Config,很輕量級、且社區(qū)活躍,遇到問題很好找到解決方案。另外呢,我個人認為阿波羅和Spring Cloud Config的區(qū)別就只是有木有界面而已。界面做得到的,我們通過git也可以的,只是用戶體驗沒那么好而已。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • 解讀String字符串導致的JVM內存泄漏問題

    解讀String字符串導致的JVM內存泄漏問題

    這篇文章主要介紹了解讀String字符串導致的JVM內存泄漏問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Mybatis插入時返回自增主鍵方式(selectKey和useGeneratedKeys)

    Mybatis插入時返回自增主鍵方式(selectKey和useGeneratedKeys)

    這篇文章主要介紹了Mybatis插入時返回自增主鍵方式(selectKey和useGeneratedKeys),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java數(shù)據(jù)結構之位圖的簡單實現(xiàn)和使用

    Java數(shù)據(jù)結構之位圖的簡單實現(xiàn)和使用

    位圖,?是一種非常常見的結構,?它使用每個二進制位來存放一個值的狀態(tài),?就類似于?Java?當中?HashSet?存儲元素的功能。本文主要來介紹一下位圖的簡單實現(xiàn)和使用,需要的可以參考一下
    2023-05-05
  • Java 設置Excel條件格式示例代碼(高亮條件值、應用單元格值/公式/數(shù)據(jù)條等類型)

    Java 設置Excel條件格式示例代碼(高亮條件值、應用單元格值/公式/數(shù)據(jù)條等類型)

    這篇文章主要介紹了Java 設置Excel條件格式示例代碼(高亮條件值、應用單元格值/公式/數(shù)據(jù)條等類型),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 淺談Spring Data Redis讀不到設進去的值

    淺談Spring Data Redis讀不到設進去的值

    本文主要介紹了Spring Data Redis怎么讀不到我剛才設進去的值,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • MyBatis-Plus中AutoGenerator的使用案例

    MyBatis-Plus中AutoGenerator的使用案例

    AutoGenerator是MyBatis-Plus的代碼生成器,通過?AutoGenerator?可以快速生成?Pojo、Mapper、?Mapper?XML、Service、Controller?等各個模塊的代碼,這篇文章主要介紹了MyBatis-Plus中AutoGenerator的詳細使用案例,需要的朋友可以參考下
    2023-05-05
  • JVM的GC日志及運行參數(shù)解讀

    JVM的GC日志及運行參數(shù)解讀

    這篇文章主要為大家介紹了JVM的GC日志及運行參數(shù)解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Java Web端程序實現(xiàn)文件下載的方法分享

    Java Web端程序實現(xiàn)文件下載的方法分享

    這篇文章主要介紹了Java Web端程序實現(xiàn)文件下載的方法分享,包括一個包含防盜鏈功能的專門針對圖片下載的程序代碼示例,需要的朋友可以參考下
    2016-05-05
  • SpringBoot項目中新增脫敏功能的實例代碼

    SpringBoot項目中新增脫敏功能的實例代碼

    項目中,由于使用端有兩個,對于兩個端的數(shù)據(jù)權限并不一樣。Web端可以查看所有數(shù)據(jù),小程序端只能查看脫敏后的數(shù)據(jù),這篇文章主要介紹了SpringBoot項目中新增脫敏功能,需要的朋友可以參考下
    2022-11-11
  • 詳解SpringBoot如何實現(xiàn)緩存預熱

    詳解SpringBoot如何實現(xiàn)緩存預熱

    緩存預熱是指在 Spring Boot 項目啟動時,預先將數(shù)據(jù)加載到緩存系統(tǒng)(如 Redis)中的一種機制,下面我們就來看看SpringBoot是如何實現(xiàn)緩存預熱的吧
    2024-01-01

最新評論