Spring Cloud Bus
Spring Cloud Config服務端負責將git svn中存儲的配置文件發佈成REST接口,客戶端可以從服務端REST接口獲取配置。但客戶端並不能主動感知到配置的變化,從而主動去獲取新的配置,這需要每個客戶端通過POST方法觸發各自的/refresh。
Spring Cloud Bus通過一個輕量級消息代理連接分佈式系統的節點。這可以用於廣播狀態更改(如配置更改)或其他管理指令。Spring Cloud Bus提供了通過POST方法訪問的endpoint/bus/refresh,這個接口通常由git的鉤子功能調用,用以通知各個Spring Cloud Config的客戶端去服務端更新配置。
SpringCloudConfig結合SpringCloudBus實現分佈式配置的工作流
- 提交代碼觸發post請求給bus/refresh
- server端接收到請求併發送給Spring Cloud Bus
- Spring Cloud bus接到消息並通知給其它客戶端
- 其它客戶端接收到通知,請求Server端獲取最新配置
- 全部客戶端均獲取到最新的配置
消息代理
消息代理(Message Broker)是一種消息驗證、傳輸、路由的架構模式。消息代理是一箇中間件產品,它的核心是一個消息的路由程序,用來實現接收和分發消息,並根據設定好的消息處理流來轉發給正確的應用。它包括獨立的通信和消息傳遞協議,能夠實現組織內部和組織間的網絡通信。設計代理的目的就是爲了能夠從應用程序中傳入消息,並執行一些特別的操作。
目前Spring Cloud Bus 支持
- RabbitMQ:spring-cloud-starter-bus-amqp
- Kafka:spring-cloud-starter-bus-kafka
RabbitMQ方式
配置RabbitMQ
創建用戶
rabbitmqctl add_user [username] [password]
設置tag
rabbitmqctl set_user_tags username [tag1] [tag2] ...
用戶授權
rabbitmqctl set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
登錄
瀏覽器訪問http://localhost:15672
服務端配置 Config Server
依賴包文件POM.xml
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.springcloud</groupId>
<artifactId>springcloud-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springcloud-eureka-provider</artifactId>
<name>springcloud-eureka-provider</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
配置application.yml文件
spring:
application:
name: springcloud-config-server
freemarker:
prefer-file-system-access: false
security:
user:
name: admin
password: 123456
cloud:
config:
# 配置倉庫的分支
label: master
server:
git:
# 配置git倉庫地址
# uri: [email protected]/springcloud-config.git
uri: file:E:/SpringBoot/SpringCloud/springcloud-root/springcloud-config
# 配置倉庫路徑
search-paths: config-file
# 訪問git倉庫的用戶名
username: zhaojq
# 訪問git倉庫的用戶密碼
password: 123456
bus:
enabled: true
trace:
enabled: true
refresh:
enabled: true
rabbitmq:
host: localhost
port: 5672
username: zhaojq
password: 123456
server:
port: 8130
management:
endpoints:
web:
exposure:
include: '*'
eureka:
instance:
hostname: eureka-config-server.com
instance-id: eureka-config-server
client:
service-url:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer1.com:8897/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer2.com:8898/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer3.com:8899/eureka/
啓動項目springcloud-config-server
rabbit,kafka, and no default binder has been set.錯誤
org.springframework.context.ApplicationContextException: Failed to start bean 'outputBindingLifecycle'; nested exception is java.lang.IllegalStateException: A default binder has been requested, but there is more than one binder available for 'org.springframework.cloud.stream.messaging.DirectWithAttributesChannel' : rabbit,kafka, and no default binder has been set.
Kafka 和 RabbitMQ 只能配置一個,如果 kafka 和 RabbitMQ 依賴包同時存在,啓動時會報上述錯誤。
客戶端配置 Config Client
依賴包文件POM.xml
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.springcloud</groupId>
<artifactId>springcloud-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springcloud-eureka-provider</artifactId>
<name>springcloud-eureka-provider</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
bootstrap.yml文件
spring:
application:
name: springcloud-eureka-provider
freemarker:
prefer-file-system-access: false
security:
user:
name: admin
password: 123456
cloud:
config:
#profile: dev
label: master
fail-fast: true
#指明配置服務中心的網址
#uri: http://eureka-config-server.com:8130
discovery:
service-id: springcloud-config-server
enabled: true
bus:
enabled: true
trace:
enabled: true
refresh:
enabled: true
rabbitmq:
host: localhost
port: 5672
username: zhaojq
password: 123456
# Spring Boot 2.x已淘汰的方式:management.security.enabled=false
management:
endpoints:
web:
exposure:
include: '*'
eureka:
instance:
hostname: eureka-provider2.com
instance-id: eureka-provider2
client:
service-url:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer1.com:8897/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer2.com:8898/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer3.com:8899/eureka/
修改配置類
在需要更新的配置類上加@RefreshScope註解,@RefreshScope必須加,否則客戶端會收到服務端的更新消息,但是更新不了,因爲不知道更新哪裏的。
package org.springcloud.eureka.provider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableDiscoveryClient
@RestController
@RefreshScope
public class ConfigProviderApplication {
@Value("${content}")
String content;
@Value("${server.port}")
String port;
@RequestMapping("/config")
public String Home(@RequestParam String name) {
return "Hello "+name+", This is from serverport:" + port+",content="+content;
}
public static void main(String[] args) {
SpringApplication.run(ConfigProviderApplication.class, args);
}
}
依次啓動項目
springcloud-eureka-cluster-peer1
springcloud-eureka-cluster-peer2
springcloud-eureka-cluster-peer3
springcloud-config-server
springcloud-eureka-provider1
springcloud-eureka-provider2
springcloud-eureka-provider3
An unexpected connection driver error occured錯誤
2020-02-23 01:17:02.141 INFO 26300 --- [SeGTZQPlTXZGQ-9] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [localhost:5672]
2020-02-23 01:17:02.145 ERROR 26300 --- [ 127.0.0.1:5672] c.r.c.impl.ForgivingExceptionHandler : An unexpected connection driver error occured
用戶授予了角色,只能登錄控制檯,但是沒有給讀寫以及管理隊列的權限,通過控制檯admin按鈕查看,參考用戶授權,rabbitmqctl set_permissions後
測試服務
1、修改配置
修改Git倉庫配置
2、查看 Config Server
瀏覽器訪問http://eureka-config-server.com:8130/application/test/master
Config Server 已經是最新的值。
3、刷新配置
發送 POST請求到:http://eureka-config-server.com:8130/actuator/bus-refresh
springcloud-eureka-provider1收到遠程更新請求
Received remote refresh request. Keys refreshed [config.client.version, content]
Attempting to connect to: [localhost:5672]
Created new connection: rabbitConnectionFactory.publisher#9282cf2:0/SimpleConnection@6f1560a7 [delegate=amqp://[email protected]:5672/, localPort= 53197]
DiscoveryClient_SPRINGCLOUD-EUREKA-PROVIDER/eureka-provider1 - registration status: 204
DiscoveryClient_SPRINGCLOUD-EUREKA-PROVIDER/eureka-provider1: registering service...
DiscoveryClient_SPRINGCLOUD-EUREKA-PROVIDER/eureka-provider1 - registration status: 204
springcloud-eureka-provider2,springcloud-eureka-provider3也收到了如上請求。
4、再次訪問 Config Client
訪問:
http://eureka-provider1.com:8001/config?name=zhaojq,
http://eureka-provider2.com:8002/config?name=zhaojq
http://eureka-provider3.com:8003/config?name=zhaojq
已經刷新了配置
Kafka方式
配置Kafka
zookeeper
- 下載安裝包
http://zookeeper.apache.org/releases.html#download - 解壓並進入ZooKeeper目錄,如:E:\SpringBoot\apache-zookeeper-3.5.7-bin\conf
- 將“zoo_sample.cfg”重命名爲“zoo.cfg”
- 打開“zoo.cfg”找到並編輯dataDir=E:\SpringBoot\apache-zookeeper-3.5.7-bin\tmp
- 添加系統變量:ZOOKEEPER_HOME=E:\SpringBoot\apache-zookeeper-3.5.7-bin
- 編輯path系統變量,添加路徑:%ZOOKEEPER_HOME%\bin
- 在zoo.cfg文件中修改默認的Zookeeper端口(默認端口2181)
- 按下Shift+右鍵,打開新的PowerShell,輸入“zkServer“,運行Zookeeper
- 命令行提示如下:說明本地Zookeeper啓動成功
注意:此窗口不關閉
Kafka
- 下載安裝包
http://kafka.apache.org/downloads - 解壓並進入Kafka目錄,如:E:\SpringBoot\kafka_2.13-2.4.0
- 進入config目錄找到文件server.properties並打開
- 找到並編輯log.dirs=log.dirs=E:\SpringBoot\kafka_2.13-2.4.0\kafka-logs
- 找到並編輯zookeeper.connect=localhost:2181
- Kafka會按照默認,在9092端口上運行,並連接zookeeper的默認端口:2181
- 進入Kafka安裝目錄E:\SpringBoot\kafka_2.13-2.4.0,按下Shift+右鍵,打開新的PowerShell,打開命令行,輸入:
.\bin\windows\kafka-server-start.bat .\config\server.properties
- 命令行提示如下:說明本地Kafka啓動成功
注意:此窗口不關閉
測試Kafka
進入Kafka安裝目錄E:\SpringBoot\kafka_2.13-2.4.0,按下Shift+右鍵,打開新的PowerShell,打開命令行,輸入:
創建Topic
.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
查看Topic
.\bin\windows\kafka-topics.bat --list --zookeeper localhost:2181
創建生產者
.\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test
創建消費者
.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
服務端配置 Config Server
依賴包文件POM.xml
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.springcloud</groupId>
<artifactId>springcloud-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springcloud-config-server</artifactId>
<name>springcloud-config-server</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置application.yml文件
spring:
application:
name: springcloud-config-server
freemarker:
prefer-file-system-access: false
security:
user:
name: admin
password: 123456
cloud:
config:
# 配置倉庫的分支
label: master
server:
git:
# 配置git倉庫地址
# uri: [email protected]/springcloud-config.git
uri: file:E:/SpringBoot/SpringCloud/springcloud-root/springcloud-config
# 配置倉庫路徑
search-paths: config-file
# 訪問git倉庫的用戶名
username: zhaojq
# 訪問git倉庫的用戶密碼
password: 123456
bus:
enabled: true
trace:
enabled: true
refresh:
enabled: true
#rabbitmq:
#host: localhost
#port: 5672
#username: zhaojq
#password: 123456
kafka:
bootstrap-servers:
- localhost:9092
server:
port: 8130
management:
endpoints:
web:
exposure:
include: '*'
eureka:
instance:
hostname: eureka-config-server.com
instance-id: eureka-config-server
client:
service-url:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer1.com:8897/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer2.com:8898/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer3.com:8899/eureka/
啓動項目springcloud-config-server
客戶端配置 Config Client
依賴包文件POM.xml
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.springcloud</groupId>
<artifactId>springcloud-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springcloud-eureka-provider</artifactId>
<name>springcloud-eureka-provider</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
bootstrap.yml文件
spring:
application:
name: springcloud-eureka-provider
freemarker:
prefer-file-system-access: false
security:
user:
name: admin
password: 123456
cloud:
config:
#profile: dev
label: master
fail-fast: true
#指明配置服務中心的網址
#uri: http://eureka-config-server.com:8130
discovery:
service-id: springcloud-config-server
enabled: true
bus:
enabled: true
trace:
enabled: true
refresh:
enabled: true
#rabbitmq:
#host: localhost
#port: 5672
#username: zhaojq
#password: 123456
kafka:
bootstrap-servers:
- localhost:9092
# Spring Boot 2.x已淘汰的方式:management.security.enabled=false
management:
endpoints:
web:
exposure:
include: '*'
eureka:
instance:
hostname: eureka-provider2.com
instance-id: eureka-provider2
client:
service-url:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer1.com:8897/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer2.com:8898/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer3.com:8899/eureka/
依次啓動項目
springcloud-eureka-cluster-peer1
springcloud-eureka-cluster-peer2
springcloud-eureka-cluster-peer3
springcloud-config-server
springcloud-eureka-provider1
springcloud-eureka-provider2
springcloud-eureka-provider3
springcloud-eureka-provider1輸出如下:
2020-02-24 02:16:36.436 INFO 12888 --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka version: 2.3.1
2020-02-24 02:16:36.436 INFO 12888 --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: 18a913733fb71c01
2020-02-24 02:16:36.436 INFO 12888 --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1582481796436
2020-02-24 02:16:36.457 INFO 12888 --- [ main] o.a.k.clients.consumer.ConsumerConfig : ConsumerConfig values:
allow.auto.create.topics = true
auto.commit.interval.ms = 100
auto.offset.reset = latest
bootstrap.servers = [localhost:9092]
check.crcs = true
client.dns.lookup = default
client.id =
client.rack =
connections.max.idle.ms = 540000
default.api.timeout.ms = 60000
enable.auto.commit = false
exclude.internal.topics = true
fetch.max.bytes = 52428800
fetch.max.wait.ms = 500
fetch.min.bytes = 1
group.id = anonymous.81ab530a-354f-407f-b513-84d6641b561c
group.instance.id = null
heartbeat.interval.ms = 3000
interceptor.classes = []
internal.leave.group.on.close = true
isolation.level = read_uncommitted
key.deserializer = class org.apache.kafka.common.serialization.ByteArrayDeserializer
max.partition.fetch.bytes = 1048576
max.poll.interval.ms = 300000
max.poll.records = 500
metadata.max.age.ms = 300000
metric.reporters = []
metrics.num.samples = 2
metrics.recording.level = INFO
metrics.sample.window.ms = 30000
partition.assignment.strategy = [class org.apache.kafka.clients.consumer.RangeAssignor]
receive.buffer.bytes = 65536
reconnect.backoff.max.ms = 1000
reconnect.backoff.ms = 50
request.timeout.ms = 30000
retry.backoff.ms = 100
sasl.client.callback.handler.class = null
sasl.jaas.config = null
sasl.kerberos.kinit.cmd = /usr/bin/kinit
sasl.kerberos.min.time.before.relogin = 60000
sasl.kerberos.service.name = null
sasl.kerberos.ticket.renew.jitter = 0.05
sasl.kerberos.ticket.renew.window.factor = 0.8
sasl.login.callback.handler.class = null
sasl.login.class = null
sasl.login.refresh.buffer.seconds = 300
sasl.login.refresh.min.period.seconds = 60
sasl.login.refresh.window.factor = 0.8
sasl.login.refresh.window.jitter = 0.05
sasl.mechanism = GSSAPI
security.protocol = PLAINTEXT
send.buffer.bytes = 131072
session.timeout.ms = 10000
ssl.cipher.suites = null
ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
ssl.endpoint.identification.algorithm = https
ssl.key.password = null
ssl.keymanager.algorithm = SunX509
ssl.keystore.location = null
ssl.keystore.password = null
ssl.keystore.type = JKS
ssl.protocol = TLS
ssl.provider = null
ssl.secure.random.implementation = null
ssl.trustmanager.algorithm = PKIX
ssl.truststore.location = null
ssl.truststore.password = null
ssl.truststore.type = JKS
value.deserializer = class org.apache.kafka.common.serialization.ByteArrayDeserializer
測試服務
1、修改配置
修改Git倉庫配置
2、查看 Config Server
瀏覽器訪問http://eureka-config-server.com:8130/application/test/master
Config Server 已經是最新的值。
3、刷新配置
發送 POST請求到:http://eureka-config-server.com:8130/actuator/bus-refresh
4、再次訪問 Config Client
訪問:http://eureka-provider3.com:8003/config?name=zhaojq
已經刷新了配置。