<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] ## **1. Spring Cloud Bus 解決的問題** ### 1.1 **疑問: 當我們更新 GitHub 中的配置文件內容后, Config 客戶端服務是否會及時更新的配置內容呢?** * **測試:** 修改config客戶端,microservice-config-application.yml配置文件的prod的端口號 ![](https://img.kancloud.cn/75/2c/752cb90e992b96e6a56fc0c9af263312_798x296.png) git配置 ![](https://img.kancloud.cn/19/99/1999fae40d7c18fe77bc357e9b8876d0_303x179.png) **將端口配置改成4010** ![](https://img.kancloud.cn/71/ef/71ef140fe9606d611db5770b36b1bd67_687x589.png) **但是端口的修改沒有生效,還是原來的4002** ![](https://img.kancloud.cn/81/7b/817b63909b132818b66624e0d552dfc9_548x119.png) * **結果** 重啟config客戶端后,配置生效 ![](https://img.kancloud.cn/7b/d3/7bd3e85294d65a70267255debcc41ae9_525x129.png) * **解決:** 如果希望在不重啟微服務的情況下更新配置如何來實現呢? 我們使用 Spring Cloud Bus 來實現配置的自動更新。 ## **2. Spring Cloud Bus介紹** 1. **Spring Cloud Bus 翻譯為消息總線。** 大家可以將它理解為管理和傳播所有分布式項目中的消息即可。 2. Spring Cloud Bus本質是**利用了MQ的廣播機制** ***在分布式的系統中傳播消息,目前常用的有Kafka和RabbitMQ。*** 3. 利用Bus的機制可以做很多的事情,其中配置中心客戶端刷新就是典型的應用場景之一,我們用一張圖來描述Bus在配置中心使用的機制。 ![](https://img.kancloud.cn/75/99/7599853401c13dcf1e599e33afd1b93f_700x345.png) ## **3. Spring Cloud Bus實踐** ### 3.1 應用服務端配置 **1. 應用服務端配置pom,添加依賴** ``` <!--Bus 與 rabbitMQ依賴--> <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> ``` **2. 修改 bootstrap.yml添加** ``` spring: rabbitmq: host: localhost port: 5672 username: guest password: guest # 暴露觸發消息總線的地址 management: endpoints: web: exposure: include: bus-refresh ``` 3. 修改git上的microservice-config-product.yml ![](https://img.kancloud.cn/19/c0/19c027e6f5990a5dcf43c6b7492d3a82_663x208.png) 改為 ![](https://img.kancloud.cn/c8/4b/c84b0a94d912a627a0200d439c0a8878_364x141.png) 但是Eureka注冊名稱很明顯,沒有改過來,一定要重啟嗎? ![](https://img.kancloud.cn/91/9c/919cb5d43a9914f8e6182017360819bf_827x254.png) **4. 使用 postman工具發送配置更新請求** 發送 POST 請求: http://localhost:8001/actuator/bus-refresh發送請求后,會向 rabbitmq 隊列發送數據,就會被監聽到進行更新服務配置信息 ![](https://img.kancloud.cn/fc/11/fc1154660d42291ba2865be6aa9d96c9_915x191.png) 配置很快就生效了 ![](https://img.kancloud.cn/77/c1/77c1a59097d3ea6a71aad71463401bd3_1204x250.png) ### **3.2 自定義類中讀取配置實戰** **1. 修改GitHub上的配置** 修改GitHub上的 microservice\-config\-product.yml 配置文件,增加自定義配置信息: ``` emp: name: tuna ``` **2. 用@Value注解獲取配置** ~~~ @Value("${emp.name}") private String name; @GetMapping("/emp") public String getEmpName() { return name; } ~~~ **3. 訪問測試** 注意:當@Value注解去取配置時,如果配置文件沒有加這個配置,則程序啟動不起來,并報解析錯誤 ![](https://img.kancloud.cn/42/74/4274f612e599803e820ea0b6aaf121eb_354x124.png) 已經讀取到了配置 **4. 修改配置** ``` emp: name: tuna ``` 改成 ``` emp: name: fish ``` 使用 postman工具發送 POST 請求: http://localhost:8001/actuator/bus-refresh,發現并沒有生效 ![](https://img.kancloud.cn/3a/10/3a1001300347e27900e4e4c477216f22_394x136.png) ### **5. 自定義配置需要 在controller上加 `@RefreshScope`注解支持** 是因為需要在 ProductController 上添加 @RefreshScope 注解 ,用于刷新配置 ~~~ package com.tuna.springcloud.server.controller; import com.tuna.springcloud.common.entities.Product; import com.tuna.springcloud.server.service.ProductService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.*; import java.util.List; @RefreshScope @RestController public class ProductController { 。。。 @Value("${emp.name}") private String name; @GetMapping("/emp") public String getEmpName() { return name; } } ~~~ **還原配置,重啟應用服務端** 再次post更新請求,生效 ![](https://img.kancloud.cn/2d/bc/2dbc8fa85fbcc9ae378197085b40b07b_444x107.png) ## 4.修改數據源實戰 1\. 先訪問 http://localhost:8001/product/get/1,發現當前獲取了 springcloud\_db01 庫的數據 ![](https://img.kancloud.cn/6d/76/6d766a6ee3962bfa64865eea49daf713_479x158.png) 2\. 修改GitHub上的 microservice\-config\-product.yml 配置文件,將 profile: dev (開發環境) 的 庫名 改 為 springcloud\_db02 ![](https://img.kancloud.cn/a0/86/a086244a1ff4846571dde79c4382457a_784x240.png) 3\. 使用 postman工具發送 POST 請求: http://localhost:8001/actuator/bus-refresh 4\. 訪問 http://localhost:8001/product/get/1,發現依然是 springcloud\_db01 庫的數據, 發現并沒有刷新配置。 ![](https://img.kancloud.cn/31/8b/318bf95179577b4244b6e67ec03d6ecf_501x123.png) ### 4.1 自定義Druid配置類 ~~~ @Configuration public class DruidConfig { @RefreshScope //刷新配置 @ConfigurationProperties(prefix = "spring.datasource") @Bean public DataSource druid() { return new DruidDataSource(); } } ~~~ ### 4.2 測試 現在取得是數據庫2 ![](https://img.kancloud.cn/80/00/8000565c26bf9e99e41ce5b16bd89e1e_472x113.png) 修改配置成數據庫1,并發送更新消息http://localhost:8001/actuator/bus-refresh 再次請求服務端,不用重啟,數據庫連接立即生效了 ![](https://img.kancloud.cn/34/42/34420acd901725fe9465a50496ec012c_512x129.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看