SpringCloud之consul服務(wù)注冊(cè)與發(fā)現(xiàn)、配置管理、配置持久化方式
前言
老牌注冊(cè)中心Eureka停更運(yùn)維,新型的consul、nacos崛起,本文介紹consul服務(wù)
一、consul是什么?
Consul 是一套開(kāi)源的分布式服務(wù)發(fā)現(xiàn)和配置管理系統(tǒng),由 HashiCorp 公司用 Go 語(yǔ)言開(kāi)發(fā)。
提供了微服務(wù)系統(tǒng)中的服務(wù)治理、配置中心、控制總線等功能。這些功能中的每一個(gè)都可以根據(jù)需要單獨(dú)使用,也可以一起使用以構(gòu)建全方位的服務(wù)網(wǎng)格,總之Consul提供了一種完整的服務(wù)網(wǎng)格解決方案。它具有很多優(yōu)點(diǎn)。包括: 基于 raft 協(xié)議,比較簡(jiǎn)潔; 支持健康檢查, 同時(shí)支持 HTTP 和 DNS 協(xié)議 支持跨數(shù)據(jù)中心的 WAN 集群 提供圖形界面 跨平臺(tái),支持 Linux、Mac、Windows
作用:
- 服務(wù)發(fā)現(xiàn):提供HTTP和DNS兩種發(fā)現(xiàn)方式
- 健康監(jiān)測(cè):支持多種方式,HTTP、TCP、Docker、Shell腳本定制化監(jiān)控
- KV存儲(chǔ):Key、Value的存儲(chǔ)方式。
- 多數(shù)據(jù)中心:Consul支持多數(shù)據(jù)中心
可視化Web界面
- consul官網(wǎng)地址:http://www.consul.io
- spring consul:http://docs.spring.io/spring-cloud-consul/docs/current/reference/html/
二、安裝運(yùn)行consul
下載地址:http://developer.hashicorp.com/consul/install
下載完成后只有一個(gè).exe文件,在該目錄下打開(kāi)cmd,輸入 consul agent -dev 使用開(kāi)發(fā)者模式啟動(dòng)consul
最后在 localhost:8500訪問(wèn)
訪問(wèn)結(jié)果:
三、使用
1、服務(wù)發(fā)現(xiàn)
將微服務(wù)注冊(cè)到consul服務(wù)中心中統(tǒng)一管理
1)在需要注冊(cè)的服務(wù)的pom文件中引入依賴(lài):
<!--SpringCloud consul discovery --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency>
注意:引入該依賴(lài)的同時(shí)也引入了loadbalancer(負(fù)載均衡),若使用的遠(yuǎn)程調(diào)用方式為RestTemplate,需要在創(chuàng)建RestTemplate的配置類(lèi)中對(duì)應(yīng)Bean的位置加上@LoadBalanced注解,支持負(fù)載均衡
@Bean @LoadBalanced //按服務(wù)名稱(chēng)調(diào)用時(shí)默認(rèn)負(fù)載均衡 要加上該注解支持負(fù)載均衡 public RestTemplate restTemplate(){ return new RestTemplate(); }
2)配置yaml
spring: application: name: cloud-consumer-order cloud: consul: port: 8500 host: localhost discovery: prefer-ip-address: true #優(yōu)先使用服務(wù)ip進(jìn)行注冊(cè) service-name: ${spring.application.name}
3)主啟動(dòng)類(lèi)添加注解:@EnableDiscoveryClient //**服務(wù)注冊(cè)和發(fā)現(xiàn)
4)啟動(dòng)主啟動(dòng)類(lèi),訪問(wèn)8500端口查看
注冊(cè)成功
2、配置管理
通用配置配置在consul,每個(gè)服務(wù)從consul獲取配置,也可接受動(dòng)態(tài)刷新
1)服務(wù)端加入依賴(lài),調(diào)用端不切換配置環(huán)境可以不配置到consul
<!--SpringCloud consul config--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency>
2)新增配置文件bootstrap.yml
- applicaiton.yml是用戶(hù)級(jí)的資源配置項(xiàng)
- bootstrap.yml是系統(tǒng)級(jí)的,優(yōu)先級(jí)更加高
Spring Cloud會(huì)創(chuàng)建一個(gè)“Bootstrap Context”,作為Spring應(yīng)用的`Application Context`的父上下文。初始化的時(shí)候,`Bootstrap Context`負(fù)責(zé)從外部源加載配置屬性并解析配置。這兩個(gè)上下文共享一個(gè)從外部獲取的`Environment`。
`Bootstrap`屬性有高優(yōu)先級(jí),默認(rèn)情況下,它們不會(huì)被本地配置覆蓋。 `Bootstrap context`和`Application Context`有著不同的約定,所以新增了一個(gè)`bootstrap.yml`文件,保證`Bootstrap Context`和`Application Context`配置的分離。
application.yml文件改為bootstrap.yml,這是很關(guān)鍵的或者兩者共存
因?yàn)閎ootstrap.yml是比application.yml先加載的。bootstrap.yml優(yōu)先級(jí)高于application.yml
- bootstrap.yml:
spring: application: name: cloud-payment-service ####Spring Cloud Consul for Service Discovery cloud: consul: host: localhost port: 8500 discovery: service-name: ${spring.application.name} config: profile-separator: '-' # default value is ",",we update '-' format: YAML
3)在consul中創(chuàng)建配置文件
以config文件夾開(kāi)始,data文件結(jié)束,中間文件夾以服務(wù)名稱(chēng)-配置環(huán)境命名 (不寫(xiě)為默認(rèn)環(huán)境)
# config/cloud-payment-service/data # /cloud-payment-service-dev/data # /cloud-payment-service-prod/data
4)動(dòng)態(tài)刷新
在主啟動(dòng)類(lèi)上加入 @RefreshScope 注解,這樣在consul中更改配置后,響應(yīng)配置會(huì)在服務(wù)端刷新
四、數(shù)據(jù)持久化
問(wèn)題:我們配置的配置文件,當(dāng)consul服務(wù)退出后就消失了,要將配置的文件持久化到本地,并開(kāi)機(jī)的時(shí)候自動(dòng)啟動(dòng)consul服務(wù)
1、在consul安裝目錄新建一個(gè)mydata文件夾存放配置的數(shù)據(jù)
2、新建一個(gè)consul_start.txt文件
文件內(nèi)容:
其中寫(xiě)明consul.exe文件位置和剛創(chuàng)建的mydata文件夾位置。其中mydata后要有空格
@echo.服務(wù)啟動(dòng)...... @echo off @sc create Consul binpath= "D:\wtp\software\cloud\consul\consul.exe agent -server -ui -bind=127.0.0.1 -client=0.0.0.0 -bootstrap-expect 1 -data-dir D:\wtp\software\cloud\consul\mydata " @net start Consul @sc config Consul start= AUTO @echo.Consul start is OK......success @pause
3、文件 consul_start.txt 保存后后綴改為.bat
4、以管理員身份運(yùn)行 consul_start.txt
效果:
總結(jié)
本文介紹了consul的安裝、使用、持久化。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot與vue實(shí)例講解實(shí)現(xiàn)前后端分離的人事管理系統(tǒng)
這篇文章主要介紹了如何用Java實(shí)現(xiàn)企業(yè)人事管理系統(tǒng),文中采用springboot+vue實(shí)現(xiàn)前后端分離,感興趣的小伙伴可以學(xué)習(xí)一下2022-06-06Spring @Valid和@Validated區(qū)別和用法實(shí)例
這篇文章主要介紹了Spring @Valid和@Validated區(qū)別和用法實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04java 定義長(zhǎng)度為0的數(shù)組/空數(shù)組案例
這篇文章主要介紹了java 定義長(zhǎng)度為0的數(shù)組/空數(shù)組案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03Springboot+Poi導(dǎo)入Excel表格實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了Springboot+Poi導(dǎo)入Excel表格實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Spring解讀@Component和@Configuration的區(qū)別以及源碼分析
通過(guò)實(shí)例分析@Component和@Configuration注解的區(qū)別,核心在于@Configuration會(huì)通過(guò)CGLIB代理確保Bean的單例,而@Component不會(huì),在Spring容器中,使用@Configuration注解的類(lèi)會(huì)被CGLIB增強(qiáng),保證了即使在同一個(gè)類(lèi)中多次調(diào)用@Bean方法2024-10-10