1. 程式人生 > >SpringCloud之配置中心

SpringCloud之配置中心

ots alt 註解 watermark 做了 point enc bus 生產環境

前言

隨著微服務越來越多,服務的配置文件也越來越多,這個時候對於配置文件的管理其實可以完全抽離出來,對於項目啟動時需要的配置寫入到bootstrap.yml中,那些可能會經常改變的則放到svn或者git上進行管理,項目啟動時,會去git或者svn上拉取對應的配置文件啟動。

創建配置中心項目

技術分享圖片

入口文件添加@EnableConfigServer註解
技術分享圖片

配置文件:

#服務名稱
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
            #這裏填寫你自己的git項目路徑,用戶名密碼
        git:
          uri: https://gitee.com/flyOX/config-center
          username: flyOX
          password: ××××××
          timeout: 5
          default-label: master

#服務的端口號
server:
  port: 9100

#指定註冊中心地址
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

到這裏那麽配置中心就已經開發完成。

改造業務服務從配置中心獲取配置文件

針對網關、商品服務、訂單服務、我在 https://gitee.com/flyOX/config-center做了相應的一個配置文件。

1.修改application.yml配置文件為bootstrap.yml,該出如下內容:

#指定註冊中心地址
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

#服務的名稱
spring:
  application:
      #name不同業務服務名ServiceId
    name: order-service
  #指定從配置中心
  cloud:
    config:
      discovery:
        service-id: CONFIG-SERVER
        enabled: true
      profile: test

2.pom文件添加Config客戶端包

       <!--配置中心客戶端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>

那麽我們重新啟動項目,一定要註意項目啟動順序:註冊中心->配置中心->產品服務->訂單服務->網關服務。到註冊中心控制臺查看相應服務是否以及啟動起來了。

技術分享圖片
同時看看相應的服務控制臺輸出的內容:
技術分享圖片
它是通過拉取git上的文件啟動的。那麽到這裏我們就以及把配置中心啟動起來了。

實現自動拉取最新配置文件

上面可以從git拉取配置文件,但是如果git上文件修改了,又不想通過重啟服務來拉取最新的配置文件我們該怎麽做呢?我們可以通過RabbitMQ+Refresh的方式做自動獲取最新配置。
這裏就是SpringCloud中的Bus:消息總線的方式,如果一旦配置文件修改,就發送一條消息到隊列中,那麽服務接受到消息則去拉取最新配置,這樣就解決了這個問題。

1.安裝一個RabbitMQ,可以通過docker安裝,很快。
2.pom文件中添加依賴:

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

3.在配置文件中添加如下:

spring:
                  rabbitmq:
                    host: localhost
                    port: 5672
                    username: guest
                    password: guest

4.暴露全部的監控信息

management:
                  endpoints:
                    web:
                      exposure:
                        include: "*"

5.需要拉取最新的地方添加@RefreshScope註解
技術分享圖片

6.http://服務ip:端口/actuator/bus-refresh

備註:動態刷新配置 在開發和測試環境使用,盡量不要或者少在生產環境使用。

參考資料:消息總線
項目文件

SpringCloud之配置中心