Config配置中心使用和配置,以及刷新配置


Config配置中心架構

步驟分析

  1.創建一個Config項目用於提供配置

  2.抽取服務提供者項目中的共有配置

  3.配置刷新機制設計和實現方式(兩種)

創建Config項目

導包,因為我們采用的eruake注冊中心,所以要導eruake包,這里不細講eruake注冊中心的配置了,上一篇有配置和集群搭建

<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>

yml配置文件,如果是私有庫需要設置用戶密碼

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/xxxx/xxx.git
          #如果設置了私有倉庫那么需要配置用戶名和密碼
          username: xxx
          password: xxx
server:
  port: 9999
#配置eureka客戶端
eureka:
  client:
    service-url:
      defaultZone:  http://eureka1:8761/eureka,http://eureka2:8762/eureka

創建一個git倉庫

 抽取服務提供者的共有配置內容,比如mysql配置

 最后一個字段alicName用來區別環境。

配置UserService用戶服務提供者

導包,讓提供者也擁有config配置中心支持

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

application/bootstrap,這兩個都是boot啟動是默認加載的配置文件。

application: 一般用於配置用戶的配置

bootstrap:一般用於配置程序啟動的引導配置,優先級別最高

先修改配置文件名

application.yml-->bootstrap.yml

配置config配置中心中讀取配置

原來的yml

 修改后的

spring:
  application:
    name: user-server
  #被提取到gitee中了
  cloud:
    config:
      discovery:
        #開啟使用config配置中心
        enabled: true
        #配置中心服務應用名稱
        service-id: config-server
      #git分支名稱
      label: master
      #git文件名稱
      name: user
      #git文件環境
      profile: test
#mybatis別名 #被提取到gitee中了

#配置eureka客戶端
eureka:
  client:
    service-url:
      defaultZone:  http://eureka1:8761/eureka,http://eureka2:8762/eureka
  instance:
    prefer-ip-address: true
server:
  port: 8001
標紅的 service-id 屬性必須與eruake中的注冊的config服務名相同才能拉取到配置

啟動

  順序:注冊中心 ----> 配置中心 ----> 用戶服務

配置更新問題

加入此時git中的配置文件有修改我們此時需要重啟Config配置的項目進行拉去最新配置,然后重啟提供者項目從eruake中拉取更配置。

如果是線下測試項目還好說,如果是線上項目可能會造成損失。

解決方案:

  1.重啟用戶服務(不建議)

  2.加入依賴 actuator,提供一個刷新配置的接口進行動態更新

  3.使用rabbitmq進行集群更新

第一個介紹過了,我們直接介紹后面兩種的具體使用方法。

actuator使用方法

還是在服務提供者項目中加入依賴

<!--健康檢測 監測-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

在配置文件中添加配置,暴露一個刷新的接口

management:
  endpoints:
    web:
      exposure:
        #此處刷新地址必須叫refresh
        include: refresh

在接口controller添加注解 @RefreshScope,不能加載啟動類上,會無效!無效!無效!無效!無效!

@RestController
@RefreshScope
public class UserController {

    @Autowired
    UserService userService;

........

現在我們重啟項目然后測試一下,因為配置中心使用的是test環境,所以修改test的配置文件

 在controller暴露一個屬性實時查看效果,對應到實體類中的massage屬性

 刷新前測試沒有變化

 使用暴露的接口進行刷新

 提示刷新成功。

再進行測試

 已經刷新到最新的修改了。動態修改配置成功。

注意事項:

  1.actuator包局限性大,每次只能刷新一個服務的配置,例如我們的提供者服務是集群搭建那么就不能只刷新8001端口了,需要刷新所有的服務。

  2.請求的刷新地址是固定的  http://{你的主機名}:{服務暴露的端口}/actuator/refresh,並且Content-Type必須為application/json,必須是POST請求。

  3.推薦使用rabbitmq的全局刷新

RabbitMq刷新配置和使用,Bus-消息總線

RabbitMq的安裝和啟動不講解了

需要注意的是上一種方式只需要修改服務提供者,使用rabbitmq需要同時對提供者和配置中心進行修改。

Config配置中心

導包

<!--健康檢測 監測-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--mq支持-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

修改配置文件

  • rabbitmq ip地址

  • rabbitmq port端口

  • 暴露刷新地址 --> bus-refresh

在spring:下添加

rabbitmq:
 #你的rabbitmq地址 host: xx.xxx.xx.xxx
#若沒修改以下屬性則會自動配置為默認
# port: 5672
# username:
# password:

與spring:平級直接添加

management:
  endpoints:
    web:
      exposure:
        #此處暴露地址必須叫 bus-refresh
        include: bus-refresh

改造用戶服務

導包

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

spring: 下添加配置

#此處注意rabbitmq前面有縮進,一定添加到spring下
rabbitmq:
  host: xx.xxx.xxx.xxx

發送請求

 可能會狀態碼204,但是不影響結果,按照步驟修改git配置文件,然后發送請求就可以看到結果了。

總結

  1.請求必須是post,http://{你的主機地址}:{端口號}/actuator/bus-refresh,刷新全部

  2.也持支刷新單個 http://{你的主機地址}:{端口號}/actuator/bus-refresh/{eruake中的服務名:端口號}

  3.他都做了什么呢 ?

    • 用戶發送post請求到配置中心

    • 配置中心會發送消息至所有用戶服務,告知需要拉取最新配置

    • 所有用戶服務接收到消息,從配置中心獲取最新配置

    • 完成更新

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM