最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

概述

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

我們的應(yīng)用部署在10臺(tái)機(jī)器上,當(dāng)我們調(diào)整完某個(gè)配置參數(shù)時(shí),無需重啟機(jī)器,10臺(tái)機(jī)器自動(dòng)能獲取到最新的配置。
如何來實(shí)現(xiàn)呢?有很多種,比如:

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

2、每臺(tái)機(jī)器提供一個(gè)更新配置信息的updateConfig接口,當(dāng)需要修改配置時(shí),挨個(gè)調(diào)用服務(wù)器的updateConfig接口。

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

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

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

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

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

1、spring cloud對(duì)應(yīng)的文檔沒有完全更新,出了問題,在文檔里找不著;

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

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

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

spring boot:

1.5.2.RELEASE

對(duì)應(yīng)的spring cloud使用:

Dalston.RELEASE

搭建spring cloud config server

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

除了config和bus之外,我們還需要使用git。因?yàn)閟pring cloud config是使用git來做版本管理的。

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

【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】啟動(dòng)類使用@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是因?yàn)閎us組件需要使用它來通知客戶端,配置有變動(dòng)。另外,記得使用

management:
 security:
 enabled: false

將驗(yàn)證關(guān)閉掉,不然后面的操作,老是報(bào)授權(quán)錯(cuò)誤。

到此服務(wù)端配置中心已經(jīng)搞定了。現(xiàn)在你就可以在服務(wù)端先做個(gè)小實(shí)驗(yàn),提交一個(gè)demo-dev.properties文件,文件的內(nèi)容如下:

address=hello

然后使用

http://localhost:8040/demo/dev

如果能輸出

{“address”:”hello”}

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

客戶端接入配置中心

我們的目標(biāo):

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

客戶端只需要做幾個(gè)小步驟即可完成接入動(dòng)作。

【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只是為了做實(shí)驗(yàn)而已。

【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/

有三個(gè)注意點(diǎn):

1、關(guān)閉驗(yàn)證:management.security.enabled=false

2、spring cloud config相關(guān)的配置一定一定要放到bootstrap.properties里

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

另外,對(duì)于客戶端來說,啟動(dòng)類是不用加上任何跟config和bus有關(guān)的注解的。

到此客戶端搞定了,我們可以使用一個(gè)controller來開始做實(shí)驗(yàn)了。

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;
 }
}

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

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

為了驗(yàn)證客戶端是否能拿到最新的配置信息,提供一個(gè)

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

方法。

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

address=hello update

并提交到git上。這個(gè)時(shí)候我們調(diào)用getAddress接口

http://localhost:8041/address

發(fā)現(xiàn)并沒有拿到最新的值。那是因?yàn)閜ush到git的這個(gè)動(dòng)作做完后,我們沒有通知到spring cloud bus??梢允褂胮ostman來做一個(gè)post請(qǐng)求,調(diào)用如下接口,來通知bus。

http://localhost:8040/bus/refresh

這個(gè)接口一旦調(diào)用成功,bus會(huì)利用RabbitMQ通知所有的客戶端,配置已經(jīng)更新。

特別注意:

我們是調(diào)用服務(wù)端的/bus/refresh接口,不是去調(diào)用客戶端的/bus/refresh接口。

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

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

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

與攜程的阿波羅對(duì)比

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

下面嘗試做一個(gè)簡單的小結(jié):

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

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Shiro在springboot中快速實(shí)現(xiàn)方法

    Shiro在springboot中快速實(shí)現(xiàn)方法

    Apache Shiro是一個(gè)Java的安全(權(quán)限)框架,可以容易的開發(fā)出足夠好的應(yīng)用,既可以在JavaEE中使用,也可以在JavaSE中使用,這篇文章主要介紹了Shiro在springboot中快速實(shí)現(xiàn),需要的朋友可以參考下
    2023-02-02
  • Spring框架的JdbcTemplate使用

    Spring框架的JdbcTemplate使用

    它是 Spring 框架中提供的一個(gè)對(duì)象,是對(duì)原始 Jdbc API 對(duì)象的簡單封裝。本文就來介紹一下Spring框架的JdbcTemplate使用,感興趣的可以了解一下
    2021-09-09
  • SpringBoot臨時(shí)屬性設(shè)置方法

    SpringBoot臨時(shí)屬性設(shè)置方法

    這篇文章主要介紹了SpringBoot臨時(shí)屬性設(shè)置方法,SpringBoot工程可以基于java環(huán)境獨(dú)立進(jìn)行jar文件啟動(dòng)服務(wù),文中給大家提到了命令行啟動(dòng)常見問題以及解決方案,需要的朋友可以參考下
    2022-09-09
  • SpringBoot中獲取配置文件的注解詳解

    SpringBoot中獲取配置文件的注解詳解

    這篇文章主要介紹了SpringBoot中獲取配置文件的注解詳解, 一般情況下:如果我們只是在某個(gè)業(yè)務(wù)邏輯中需要獲取一下配置文件中的某項(xiàng)值,使用@Value,如果我們使用JavaBean來與配置文件進(jìn)行映射,我們直接使用@ConfigurationProperties,需要的朋友可以參考下
    2023-10-10
  • hibernate 命名查詢?nèi)绾螌?shí)現(xiàn)

    hibernate 命名查詢?nèi)绾螌?shí)現(xiàn)

    Hibernate允許在映射文件中定義字符串形式的查詢語句,這種查詢方式成為命名查詢,需要的朋友可以參考下
    2012-11-11
  • Java實(shí)現(xiàn)將數(shù)據(jù)導(dǎo)出為Word文檔的方法步驟

    Java實(shí)現(xiàn)將數(shù)據(jù)導(dǎo)出為Word文檔的方法步驟

    我們?cè)陂_發(fā)一些系統(tǒng)的時(shí)候,例如OA系統(tǒng),經(jīng)常能遇到將審批單數(shù)據(jù)導(dǎo)出為word和excel文檔的需求,導(dǎo)出為excel是比較簡單的,但是word文檔的格式不像表格那樣可以輕松的定位,所以本文給大家介紹了Java怎樣實(shí)現(xiàn)將數(shù)據(jù)導(dǎo)出為Word文檔,需要的朋友可以參考下
    2025-01-01
  • SpringBoot中@PostConstruct 注解的實(shí)現(xiàn)

    SpringBoot中@PostConstruct 注解的實(shí)現(xiàn)

    在Spring Boot框架中,?@PostConstruct是一個(gè)非常有用的注解,它用于在依賴注入完成后執(zhí)行初始化方法,本文將介紹?@PostConstruct的基本概念、使用場景以及提供詳細(xì)的代碼示例,感興趣的可以了解一下
    2024-09-09
  • java中的十個(gè)大類總結(jié)

    java中的十個(gè)大類總結(jié)

    java.lang.string字符串類將是無可爭議的冠軍在任何一天的普及和不可以否認(rèn)。這是最后一個(gè)類,用來創(chuàng)建操作不可變字符串字面值
    2013-10-10
  • MyBatis使用resultMap如何解決列名和屬性名不一致

    MyBatis使用resultMap如何解決列名和屬性名不一致

    這篇文章主要介紹了MyBatis使用resultMap如何解決列名和屬性名不一致的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot 利用MultipartFile上傳本地圖片生成圖片鏈接的實(shí)現(xiàn)方法

    SpringBoot 利用MultipartFile上傳本地圖片生成圖片鏈接的實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringBoot 利用MultipartFile上傳本地圖片生成圖片鏈接的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03

最新評(píng)論

确山县| 札达县| 通许县| 栾川县| 湘乡市| 专栏| 景宁| 乌拉特中旗| 龙山县| 轮台县| 万州区| 蓝山县| 达拉特旗| 犍为县| 台中市| 山阴县| 留坝县| 左权县| 虹口区| 松溪县| 天柱县| 德江县| 大新县| 朝阳区| 云梦县| 张家港市| 阿尔山市| 克东县| 万宁市| 英山县| 民县| 新蔡县| 昭通市| 镇宁| 美姑县| 应城市| 阿拉尔市| 沾益县| 大姚县| 南溪县| 象州县|