單體應用,設定寫在組態檔中,沒有什麼大問題。如果要切換環境 可以切換不同的profile(2種方式),但在微服務中。
微服務比較多。成百上千,設定很多,需要集中管理。
管理不同環境的設定。
需要動態調整設定引數,更改設定不停服。
分散式設定中心包括3個部分:
建立倉庫
登入GitHub建立倉庫,並上傳幾個組態檔
新建微服務作為設定中心服務
依賴
<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.config.server.git.uri=https://github.com/piziniao/config-center.git
spring.cloud.config.label=master
eureka.client.service-url.defaultZone=http://euk1.com:7002/eureka/
啟動類
package com.mashibing.admin;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@EnableConfigServer
@SpringBootApplication
public class AConfigApplication {
public static void main(String[] args) {
SpringApplication.run(AConfigApplication.class, args);
}
}
啟動服務後存取服務
http://localhost:70/master/config-client-dev.properties
正確設定後能讀到來自git的組態檔
獲取設定規則:根據字首匹配
/{name}-{profiles}.properties
/{name}-{profiles}.yml
/{name}-{profiles}.json
/{label}/{name}-{profiles}.yml
name 服務名稱
profile 環境名稱,開發、測試、生產:dev qa prd
lable 倉庫分支、預設master分支
匹配原則:從字首開始。
分支讀取
修改 application.properties為bootstrap.properties
#直接URL方式查詢設定中心
spring.cloud.config.uri=http://localhost:9999/
#通過註冊中心查詢
#spring.cloud.config.discovery.enabled=true
#spring.cloud.config.discovery.service-id=a-config
spring.cloud.config.profile=dev
spring.cloud.config.label=dev
引入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
使用遠端設定
@Value("${config.info}")
String info;
consumer-dev.properties
config.info="config-dev,v1"
erlang安裝
http://www.erlang.org/downloads
RabbitMQ安裝
http://www.rabbitmq.com/install-windows.html
環境變數
path中新增 %ERLANG_HOME%\bin
# 開啟RabbitMQ節點
rabbitmqctl start_app
# 開啟RabbitMQ管理模組的外掛,並設定到RabbitMQ節點上
rabbitmq-plugins enable rabbitmq_management
管理介面
http://localhost:15672
使用者名稱密碼均為guest
服務設定
組態檔
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
測試
啟動兩個微服務
修改組態檔後向其中一個端點傳送post請求
http://localhost:91/actuator/bus-refresh
觀察另一個服務是否也跟著重新整理了
完整設定
#################################### common config : ####################################
spring.application.name=a-config
# 應用服務web存取埠
server.port=9999
# ActuatorWeb存取埠
management.server.port=8081
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
spring.cloud.config.server.git.uri=https://github.com/piziniao/config-center.git
spring.cloud.config.label=master
eureka.client.service-url.defaultZone=http://euk1.com:7002/eureka/
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
啟動類
@EnableConfigServer
依賴
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
Consumer
bootstrap.properties
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=a-config
spring.cloud.config.profile=dev
spring.cloud.config.label=dev
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
依賴
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
遠端設定
consumer-dev.properties
config.info="config-dev,v8"