天天看點

SpringCloud之——Config

config作為Springcloud的五大神獸之一,也是我們玩SpringCloud必回的技術之一,它也給我們提供了相當程度的友善!

同時附上我練習時搭建的一個簡單的SpringCloud項目,其中包含了feign、swagger-ui、rabbitmq、redis、aop、定時任務、檔案上傳于下載下傳、excel導出、多資料源配置等demo,該項目也包含了SpringCloud的常用元件:

SpringCloud下載下傳連結://download.csdn.net/download/weixin_45417573/12104123

Config配置下載下傳連結://download.csdn.net/download/weixin_45417573/12104128

一、為什麼要使用config配置中心

微服務時代,一個項目都是有很多個服務的,而且服務可能部署在不同的地方,這樣一來,如果要修改某個服務的某個配置就變得不是那麼友善,那麼,有沒有可能把這些配置檔案都集中起來進行集中的管理和維護呢?這就是配置中心!

二、配置中心的大概實作思路

配置中心的大概實作思路是将所有服務的配置檔案集中放在git伺服器上,同時每個服務本地也存放一份配置,但git伺服器上的配置優先于本地配置,這樣如果我們需要修改配置隻需要修改git伺服器上的配置檔案,就可以了,綜上所述,config配置中心的大緻實作方式可以猜測通過如下步驟來實作:

(1)在本地建立一個項目,将多有服務的配置檔案存放到服務中

(2)建立一個git倉庫,将所有服務的配置檔案上傳到倉庫中

(3)建立一個config伺服器,用于同步git倉庫中的配置檔案

(4)在每個服務中增加配置,實作優先加載git伺服器上的配置

三、具體實作

1、建立一個普通的java項目,用于存放所有的配置檔案,為了友善區分,将每個配置檔案的檔案名改成相應的服務名.yml

SpringCloud之——Config

2、将配置檔案上傳到git伺服器中,友善本地操作及更新送出

SpringCloud之——Config

3、建立一個config服務

在建立之前,需要說明的一點是,就如eureka一樣。config亦分為服務端和用戶端,服務端就是我們的config服務。用戶端就是我們管理配置的服務,這一點和eureka非常類似!

(1)添加依賴

<dependency>
  		<groupId>org.springframework.cloud</groupId>
  		<artifactId>spring-cloud-config-server</artifactId>
  	</dependency>
  	<!-- eureka用戶端 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>
  		spring-cloud-starter-netflix-eureka-client
  			</artifactId>
		</dependency>
           

(2)啟動類添加注解

(3)添加yml配置

server:
  port: 8007
spring:
  application:
    name: jt-config
  redis:
    host: 192.168.40.152
    port: 6379 
  cloud:
    config:
      server:
        git:
          uri: https://github.com/wwenyi/jt-config.git
          search-paths: config
          username: *****
          password: ****
eureka:
  instance:
    prefer-ip-address: true #以IP位址注冊到服務中心,互相注冊使用IP位址
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka/
           

至此,服務端已準備完畢,接下來準備用戶端,我們可以通過通路該服務+yml檔案名來驗證服務端是否正确,例如:

localhost:8007/jt-user.yml

4、修改用戶端

(1)在所有需要管理配置的服務中添加依賴(暴露重新整理端點,友善通過該端點重新整理配置):

之前如果做過hystrix監控的服務中已經添加過該依賴

<!-- 暴露監控端點 -->
        <dependency>
        	<groupId>org.springframework.boot</groupId>
        	<artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
           

(2)新增yml檔案

這裡注意,是新增,不是修改!!!該yml檔案先與application.yml加載,用于引導git上的配置

檔案名:bootstrap.yml

配置内容如下:

spring: 
  cloud:
    config:
      discovery:
        enabled: true
        #config服務的服務名
        service-id: jt-config
        #yml檔案名
      name: user-config
 #注意:eureka的配置不能省略!!!因為服務啟動時會去eureka中找config服務
 # 如果一旦省去了eureka的配置,就會出現找不到config的錯誤,同時,git上的配置也不會生效!!!!
eureka:
  instance:
    prefer-ip-address: true #以IP位址注冊到服務中心,互相注冊使用IP位址
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka/

           

好了,到這裡config配置中心的工作就做完了,我們可以測試一下,

我們可以在git上的配置新增一個監控端點,如果通路到這個新增的端點,就說明我們的配置中心已生效:

#暴露監控斷點,供hystrix儀表盤監控健康狀态  
#暴露重新整理端點,兩個端點之間用,隔開
management:
  endpoints:
    web:
      exposure:
        include: hystrix.stream,refresh
           

修改以後重新開機服務,通路一下ip+端口+/actuator,例如:

http://localhost:8002/user/actuator

我們如果能看到refresh端口已經打開了,那麼說明我們配置中心已經完成:

SpringCloud之——Config

四、bus+rabbitMQ實作動态重新整理

以上的方法是需要我們重新開機服務,服務才會去重新拉取配置中心的配置,那麼,有沒有可能再不重新開機服務的前提下,隻要修改了配置,服務就能動态的擷取到配置呢?是以這裡,我們就要利用到bus+rabbit了,關于rabbitmq我前面有簡單的介紹安裝和使用過程,這裡就不贅述了!直接開幹!

1、服務端修改:

(1)添加依賴:

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

(2)添加rabbitmq的配置,并暴露監控端口

#rabbitmq的配置
spring:
  rabbitmq:
    host: 192.168.40.152
    username: admin
    password: admin
    port: 5672
    #暴露端口
management:
  endpoints:
    web:
      exposure:
        include: bus-refresh
           

2、用戶端

(1)添加依賴

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

(2)添加rabbitmq的配置

#rabbitmq的配置
spring:
  rabbitmq:
    host: 192.168.40.152
    username: admin
    password: admin
    port: 5672
           

到此為止,搞定!!

注意:springcloud預設的是git上的配置優先級大于本地的配置,如果要使用本地配置,需要将所有的配置檔案放到config服務中,并修改yml中的配置打開本地配置,配置如下:

spring:
  profiles:
    active: native