Spring Cloud Bus消息總線

準備工做

環境以及版本:
tools vision
IDEA 2018.3
SpringBoot 2.1.3 RELEASE
Gradle 5.2.1+
JDK 1.8
Spring Cloud Greenwich.RELEASE
說明

如下改造均在子項目進行操做,父項目的github地址,下述需下載父項目用來管理公共依賴:
github.com/cuifuan/spr…java

1.改造你的 config-server

1.1 構建配置文件 build.gradle
dependencies {
    implementation "org.springframework.cloud:spring-cloud-config-server"
    implementation "org.springframework.cloud:spring-cloud-bus"
    implementation "org.springframework.cloud:spring-cloud-starter-bus-amqp"
}
複製代碼
1.2 配置文件 application.yml
server:
 port: 7001
spring:
 application:
 name: config-server
 cloud:
 config:
 server:
 git:
 uri: git地址 #例如https://github.com/cuifuan/springcloud-configuration.git
 search-paths: 倉庫文件下文件夾
 default-label: master
 username: git帳號
 password: git密碼
 bus:
 trace:
 enabled: true
 rabbitmq:
 host: rabbitmq地址
 port: 5672
 username: rabbit帳號【默認:guest】
 password: rabbit密碼【默認:guest】
 virtual-host: /
eureka:
# 修改在服務中心的地址status爲 ip+端口 【例如:10.0.0.100:88】
 instance:
 prefer-ip-address: true
 instance-id: ${spring.cloud.client.ip-address}:${server.port}
 client:
 serviceUrl:
 defaultZone: http://springcloud-tools:8761/eureka/
info:
 app:
 description: This is Spring Cloud remote Registration center.
 name: tools-config-server
 version: 0.0
management:
 endpoint:
 bus-refresh:
 enabled: true
 endpoints:
 web:
 exposure:
 include: refresh,bus-refresh
複製代碼
1.3 啓動類 ToolsConfigServerAppliaction.java
package store.zabbix.config;

import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@EnableConfigServer
@SpringCloudApplication
@RestController
public class ToolsConfigServerAppliaction {

    public static void main(String[] args) {
        SpringApplication.run(ToolsConfigServerAppliaction.class, args);
    }

    @RequestMapping("/")
    public String home() {
        return "Hello World! My name is configserver.";
    }

}
複製代碼

2. 改造你的 config-client (客戶端)

用來讀取配置文件的git

2.1 構建配置文件 build.gradle
dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-config'
    implementation "org.springframework.cloud:spring-cloud-bus"
    implementation "org.springframework.cloud:spring-cloud-starter-bus-amqp"
}
複製代碼
2.2 配置文件 bootstrap.yml
spring:
 cloud:
 config:
 name: tools-config-client     #對應{application}部分
 profile: dev                  #對應{profile}部分
      #uri: http://localhost:8888/ #配置中心的具體地址
 label: master                 #對應git的分支。若是配置中心使用的是本地存儲,則該參數無用
 discovery:
 enabled: true                 #開啓Config服務發現支持
 service-id: config-server   #指定配置中心的service-id,便於擴展爲高可用配置集羣。
eureka:
 instance:
 prefer-ip-address: true
 instance-id: ${spring.cloud.client.ip-address}:${server.port}
 client:
 service-url:
 defaultZone: http://springcloud-tools:8761/eureka/
複製代碼
2.2 配置文件 application.yml
server:
 port: 7003
spring:
 application:
 name: tools-config-client
 cloud:
 config:
  #配置重試機制
 retry:
 initial-interval: 2000
 max-attempts: 2000
 max-interval: 2000
 multiplier: 1.2
 fail-fast: true
 bus:
      #動態刷新配置
 refresh:
 enabled: true
      #跟蹤總線事件
 trace:
 enabled: true
 rabbitmq:
 host: rabbitmq地址
 port: 5672
 username: rabbit帳號【默認:guest】
 password: rabbit密碼【默認:guest】
#配置actuator
# 1.X版本的springboot 配置: management.security.enabled=false 已經做廢
#關閉安全認證
management:
 endpoint:
 bus-refresh:
 enabled: true
  #refresh接入點顯式暴露出來
 endpoints:
 web:
 exposure:
 include: refresh,bus-refresh
複製代碼
2.3 啓動類 ConfigClientApplication.java

注意:必定不要忘了加@RefreshScop註解github

package store.zabbix.configreader;

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.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
@RefreshScope
@EnableDiscoveryClient
public class ConfigClientApplication {

    /** * http://localhost:8881/actuator/bus-refresh */

    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }

    @Value("${message}")
    String message;

    @GetMapping("/hello")
    public String getMessage(){
        return message;
    }

}

複製代碼

3.遠程配置文件

4.操做流程

  • 1 啓動config-server
  • 2 啓動config-client
  • 3 訪問http://127.0.0.1:7003/hello
  • 4 以後更改遠程倉庫配置文件,提交
  • 5 訪問http://127.0.0.1:7003/hello發現無變化
  • 6 用postman作post請求http://10.0.0.82:7001/actuator/bus-refresh

或者用web

curl -X POST http://10.0.0.82:7001/actuator/bus-refresh
複製代碼
  • 7 再次訪問http://127.0.0.1:7003/hello

這個時候的讀取的配置文件已發生變化spring

5.須要注意的坑

  • 請肯定你的rabbitmq是通的,guest帳戶沒法經過遠程ip訪問
  • 注意上面的ip地址,我是這邊測試使用,請更改爲我的正確或者本地
  • springboot2.x以後bus刷新地址更改成 /actuator/bus-refresh
  • springboot和springcloud版本要一致,其餘版本沒試過
相關文章
相關標籤/搜索