微服務-配置中心
最初是將配置文件放在各自的項目,生產環境中修改配置文件需要重啓項目,通用的配置需要修改多處
引入server config,專門創建一個管理配置文件的項目,每個項目特有的配置及通用的配置分開,簡化開發,修改配置文件不需要重啓項目
1.config服務端的相關配置
server config配置git讀取遠端的文件
application.yml如下:
server: port: 2224 spring: application: name: ms-config cloud: #開啓刷新機制 bus: refresh: enabled: true config: server: git: #GitHub上面的git倉庫名字 uri: #分支 label: master #{application}對應訪問服務的應用名 search-paths: /config-repo/{application} username: password: kafka: bootstrap-servers: 127.0.0.1:9092 eureka: instance: # 使用 ip 代替實例名 prefer-ip-address: true # 實例的主機名 hostname: ${spring.cloud.client.ip-address} # 實例的 ID 規則 instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} client: service-url: # 註冊中心地址 defaultZone: http://${eureka.instance.hostname}:2221/eureka/ management: endpoints: web: exposure: # yml文件中*不能直接寫,會啓動報錯,加""或者''均可以 # 由於暫只實現了全部配置文件的刷新,需要寫* include: "*"
pom文件中需要加入
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
由於需要註冊到eureka中,那麼eureka的依賴也是需要的
之後是文件自動刷新所需要的依賴,看是使用kafka還是mq作爲中間件,這裏需要注意不能2箇中間件的依賴都有,啓動會報錯
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-kafka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-kafka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-bus</artifactId> </dependency>
2.準備git項目管理配置文件,當然svn也是可以的
這裏需要注意git上存放的文件地址和前面server config中application.yml文件中的spring.cloud.config.git.search-paths配置項對應,我這裏使用的是/config-repo/{application},config-repo是該項目點擊目錄進去的最外層的目錄,目前以項目名劃分目錄名稱,在config-repo下再新建目錄,比如:/config-repo/user這樣,多個的話可以用以上佔位符的方式,或者寫全路徑,中間以逗號分隔,此處由於該項目不需要啓動,僅做爲文件的存放,寫yml文件或者其他格式的文件時無法得知是否存在格式的問題,當配置完後,提交了git遠端倉庫後,可以訪問url,看是否有返回,比如:http://localhost:2224/user-dev.yml,這裏需要注意如你的文件名稱不是/user,也就是說不和你的服務名稱(spring.application.name)一致時,那麼在config的客戶端中有項配置是不能省略的
3.開發客戶端
pom文件中需要的依賴:
config的依賴如下,和服務端的不同需注意
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
當然eureka的依賴和文件自動刷新的依賴也是需要添加的,同服務端的依賴一致,注意spring cloud的版本保持一致
以前都是使用的application.yml文件,現在需要新增一個bootstrap.yml,由於加載先後的順序問題,我們需要把需要的信息放到bootstrap.yml文件中,application.yml文件中僅保留端口號和服務名稱就可以了
如下是bootstrap.yml的配置:
spring: cloud: bus: refresh: enabled: true config: label: master #以下配置就是前面第二點中說到的,當服務名稱和文件夾的文件不同時,不可以省略的配置項 name: user profile: test uri: http://25860h0t91.qicp.vip/git/r/MicroService/sso-config.git discovery: enabled: true service-id: ms-config kafka: bootstrap-servers: 127.0.0.1:9092 eureka: instance: prefer-ip-address: true hostname: ${spring.cloud.client.ip-address} instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} client: service-url: defaultZone: http://${spring.cloud.client.ip-address}:2221/eureka/
最後當你修改並提交了配置文件,需要手動刷新下
請求這個URL http://localhost:2224/actuator/bus-refresh
目前以實現半自動化刷新配置文件