真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

概述

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比烏審網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式烏審網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋烏審地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。

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

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

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

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

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

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

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

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

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

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

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

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

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

spring boot:

1.5.2.RELEASE

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

Dalston.RELEASE

搭建spring cloud config server

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

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

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

【1】引入config和bus組件


org.springframework.cloud
  spring-cloud-config-server
 
 
org.springframework.cloud
  spring-cloud-starter-bus-amqp

【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倉(cāng)庫(kù)

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組件需要使用它來(lái)通知客戶端,配置有變動(dòng)。另外,記得使用

management:
 security:
 enabled: false

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

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

address=hello

然后使用

http://localhost:8040/demo/dev

如果能輸出

{“address”:”hello”}

就說(shuō)明spring cloud config跟git的交互是ok的。

客戶端接入配置中心

我們的目標(biāo):

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

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

【1】引入依賴


  org.springframework.boot
  spring-boot-starter-web
 
 
  org.springframework.cloud
  spring-cloud-starter-config
 

 
  org.springframework.cloud
  spring-cloud-starter-bus-amqp
 

引入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ì)于客戶端來(lái)說(shuō),啟動(dòng)類是不用加上任何跟config和bus有關(guān)的注解的。

到此客戶端搞定了,我們可以使用一個(gè)controller來(lái)開(kāi)始做實(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)并沒(méi)有拿到最新的值。那是因?yàn)閜ush到git的這個(gè)動(dòng)作做完后,我們沒(méi)有通知到spring cloud bus??梢允褂胮ostman來(lái)做一個(gè)post請(qǐng)求,調(diào)用如下接口,來(lái)通知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來(lái)幫一下忙。

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

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

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

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

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

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

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

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

總結(jié)

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


標(biāo)題名稱:利用SpringCloudConfig結(jié)合Bus實(shí)現(xiàn)分布式配置中心的步驟
本文地址:http://weahome.cn/article/ihjesp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部