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