SpringCloud組件之消息總線Bus(Hoxton版本)

 

1.Spring Cloud Bus簡介

Spring Cloud Bus 是 Spring Cloud 體系內的消息總線,用來連接分佈式系統的所有節點。 Spring Cloud Bus 將分佈式的節點用輕量的消息代理(RibbitMQ、Kafka)連接起來。可以通過消息代理廣播配置文件的更改,或服務之間的通訊,也可以用於監控。解決了微服務數據變更,及時同步的問題。 目前 Spring Cloud Bus 支持兩種消息代理:RabbitMQ 和 Kafka,下面以 RabbitMQ 爲例來演示下使用Spring Cloud Bus 動態刷新配置的功能。

2.搭建演示工程

2.1 環境準備

由於本文中使用 RabbitMQ 作爲消息代理,故需要安裝RabbitMQ,安裝部署參考: https://blog.csdn.net/ThinkWon/article/details/103753372

本文案例基於上一篇文章中Config Server與Config Client工程改造。並啓動Eureka Server。

2.2 Config Server工程改造

引入bus相關依賴,具體pom如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-demo</artifactId>
        <groupId>com.hxmec</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-cloud-config-server</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- config server依賴包-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>


        <!-- Spring Cloud Bus-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

在配置文件application.yml中加上RabbitMq的配置,包括RabbitMq的地址、端口,用戶名、密碼。並需要加上spring.cloud.bus的配置,具體如下:

server:
  port: 9005
spring:
  application:
    name: config-server
  cloud:
    config:
      label: master
      server:
        git:
          #github配置地址
          uri: https://github.com/ty1972873004/spring-cloud-config.git
          #配置文件路徑
          search-paths: appconfig
          #username:
          #password:
          #git分支
          default-label: master
    bus:
      enabled: true
      trace:
        enabled: true
  # 消息隊列
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    virtual-host: /

# 度量指標監控與健康檢查
management:
  endpoints:
    web:
      base-path: /actuator    # 訪問端點根路徑,默認爲 /actuator
      exposure:
        include: bus-refresh  # 需要開啓的端點

logging:
  pattern:
    console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/

2.2 Config Client工程改造

引入bus相關依賴,具體pom如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-demo</artifactId>
        <groupId>com.hxmec</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-cloud-config-client</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- config client依賴包-->
        <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-client</artifactId>
        </dependency>

        <!-- SpringCloud Bus -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

在配置文件application.yml中加上RabbitMq的配置,包括RabbitMq的地址、端口,用戶名、密碼。並需要加上spring.cloud.bus的配置,具體如下:

spring:
  application:
    name: config-client
  cloud:
    config:
      uri: http://127.0.0.1:9005/
      label: master
      profile: dev
      name: ${spring.application.name}
      discovery:
        enabled: true
        service-id: config-server
    bus:
      enabled: true
      trace:
        enabled: true
  # 消息隊列
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    virtual-host: /

management:
  endpoints:
    web:
      exposure:
        include: 'refresh'

server:
  port: 9006

logging:
  pattern:
    console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/

在獲取動態配置的類或者啓動類中添加@RefreshScope註解用於刷新配置

@RestController
@RequestMapping("/demo")
@Slf4j
@RefreshScope
public class DemoController {

    @Value("${hx.name:#{null}}")
    private String name;

    @GetMapping(value = "/test1")
    public String  test1(){
        return "Hello " + name;
    }
}

2.3 工程演示

啓動Config Server,Config Client工程此時配置文件如下訪問config client中接口http://127.0.0.1:9006/demo/test1 可以看下如下結果。修改github中配置文件,如下此時訪問訪問接口還是返回沒有更改前的結果。此時,我們發送post請求:http://localhost:9005/actuator/bus-refresh ,再次請求接口http://127.0.0.1:9006/demo/test1 ,可以看下如下結果,說明驗證通過。

3.工程地址

https://github.com/ty1972873004/spring-cloud-demo

 

4.參考文檔

  • https://cloud.spring.io/spring-cloud-static/spring-cloud-bus/2.2.1.RELEASE/reference/html/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章