config server bus動態更新配置

2022-02-18 09:54:37 字數 3470 閱讀 1937

config-server用來搭建配置中心,而配置資訊一般使用gitlab倉庫來儲存,這樣在你的配置發生改變時,不需要從新打包,而如果使用native的試,則需要從新打乙個config-server的jar包。

當你的服務的配置資訊發生改變時,一般來說需要從新重啟你的服務,配置資訊才能生效,這對於我們來說是不友好的,所以springcloud有一種訊息匯流排的方式來實現配置資訊的熱更新,更你的服務不需要從新啟動。

org.springframework.cloud

spring-cloud-starter-netflix-eureka-server

程式新增註解

@enableeurekaserver

public static void main(string args)

}yml檔案

enable-self-preservation: false #自我保護機制

eviction-interval-timer-in-ms: 30000 #及時踢出已關停的節點它是配置中心,其它服務如果通過config-server在eureka裡的服務名去連線它,這種是以eureka為核心;也可以單獨指定,並把eureka的資訊寫到config-server倉庫裡,這是以config-server為核心,這兩種方式都可以,咱們這個例子是以eureka為核心的,所以config-server也是乙個eureka-client.

org.springframework.cloud

spring-cloud-config-server

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

程式新增註解

@enablediscoveryclient

@enableconfigserver

public static void main(string args)

}新增yml配置

spring:

name: config-server

cloud:

config:

server:

git:

uri: [email protected]:***/config_repo.git

username: ***

password: ***

searchpaths: ''

server:

port: 8888

eureka:

client:

service-url:

defaultzone: http://localhost:8761/eureka/

這是我們具體的業務服務,它是乙個eureka-client也是乙個config-client,它需要把自己註冊到eureka裡,也需要從config-server拉自己的資訊,它需要有配置資訊的熱更新,所以這需要引用amqp包和actuator健康檢測包。

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-config

org.springframework.cloud

spring-cloud-starter-bus-amqp

org.springframework.boot

spring-boot-starter-actuator

程式新增註解

@enablediscoveryclient

@restcontroller

@refreshscope

@value("$")

string author;

public static void main(string args)

public string hello()

}新增yml檔案

spring:

cloud:

bus.trace.enabled: true #配置動態更新

rabbitmq:

host: 127.0.0.1

port: 5672

username: guest

password: guest

config:

discovery:

enabled: true #這塊表示啟用service-id不用uri

service-id: config-server #這塊是服務的id

label: master

profile: svt

name: service1

server:

port: 8081

eureka:

instance:

prefer-ip-address: true #基於ip位址的註冊而不是主機名

include: bus-refresh

當你的config_repo倉庫有檔案更新時,你可以呼叫任意乙個服務去觸發它,測試的**如

curl -v -x post "http://localhost:8081/actuator/bus-refresh"
如果成功後,一般會返回httpstatuscode:204的狀態碼,當然這種也是手動更新,如果希望動態更新,可以在gitlab或者github上對config_repo專案新增webhook的事件,當有分支合併到dev或者master時,去自動觸發bus-refresh。

Prometheus Targets動態配置

prometheus的配置通過配置檔案實現,每個配置檔案對應乙個prometheus server。生產環境部署時,prometheus server會部署多個例項,手工修改配置存在諸多不便。常見場景如下 1 為了實現高可用,prometheus server通常部署多個例項。2 聯盟方式部署pro...

動態更新UI之元件更新

專案中使用到了仿iphone那樣的城市分組列表,網上找到了乙個demo但是問題來了,他的資料是直接放在裡面的,而我的需求是動態獲取資料,再更新ui import android.content.context import android.graphics.canvas import android...

動態更新活動條件

活動的條件有兩種 條件和宣告性規則條件。如果我們改變了 條件我們需要重新編譯我們的工作流程式才可以。由於宣告行規則條件是序列化到.rules檔案中的,所以我們可以動態的更新,下面舉例說明 我們建立乙個順序型工作流控制台程式,工作流設計如下圖 然後分別設定分支條件 均為宣告性規則條件 如下 ifels...