Spring Cloud Consul服務(wù)注冊與發(fā)現(xiàn)

Spring Cloud ConsulHashiCorpVagrant的創(chuàng)建者)開發(fā)的一個服務(wù)發(fā)現(xiàn)與配置項目,與Docker容器可以無縫集成。Consul是一套開源的分布式服務(wù)發(fā)現(xiàn)和配置管理系統(tǒng),支持多數(shù)據(jù)中心分布式高可用。用Go語言開發(fā),基于 Mozilla Public License 2.0 的協(xié)議開源。

Github地址:https://github.com/hashicorp/consul
官網(wǎng)地址:https://www.consul.io/

Consul包含多個組件,但是作為一個整體,為你的基礎(chǔ)設(shè)施提供服務(wù)發(fā)現(xiàn)和服務(wù)配置的工具.他提供以下關(guān)鍵特性:

1.服務(wù)發(fā)現(xiàn)
Consul的客戶端可用提供一個服務(wù),比如 api 或者mysql ,另外一些客戶端可用使用Consul去發(fā)現(xiàn)一個指定服務(wù)的提供者.通過DNS或者HTTP應(yīng)用程序可用很容易的找到他所依賴的服務(wù)。
2.健康檢查
Consul客戶端可用提供任意數(shù)量的健康檢查,指定一個服務(wù)(比如:webserver是否返回了200 OK 狀態(tài)碼)或者使用本地節(jié)點(比如:內(nèi)存使用是否大于90%).這個信息可由operator用來監(jiān)視集群的健康.被服務(wù)發(fā)現(xiàn)組件用來避免將流量發(fā)送到不健康的主機。
3.Key/Value存儲
應(yīng)用程序可用根據(jù)自己的需要使用Consul的層級的Key/Value存儲
比如動態(tài)配置,功能標(biāo)記,協(xié)調(diào),領(lǐng)袖選舉等等,簡單的HTTP API讓他更易于使用。
4.多數(shù)據(jù)中心
Consul支持開箱即用的多數(shù)據(jù)中心.這意味著用戶不需要擔(dān)心需要建立額外的抽象層讓業(yè)務(wù)擴展到多個區(qū)域。

Consul服務(wù)端安裝

由于Spring Cloud ConsulHashiCorp公司開發(fā),并不是開發(fā)SpringPivotal團隊,所以下載Consul官方的服務(wù)端
Consul服務(wù)端下載地址:https://www.consul.io/downloads.html

對應(yīng)自己的操作系統(tǒng)選擇下載
QQ截圖20180617224540.png
進(jìn)行環(huán)境變量配置

在系統(tǒng)變量Path下加上解壓的根目錄
例如解壓的是E盤下consul文件夾就寫E:\consul

QQ截圖20180617225216.png

驗證是否配置成功

cmd中輸入consul

QQ截圖20180618111240.png

出現(xiàn)以上信息就是配置成功了

啟動服務(wù)端

windows系統(tǒng)在cmd下輸入consul agent -dev看到以下界面就是啟動成功,
如果啟動不了可以在cmd進(jìn)入到consul根目錄再輸入consul agent -dev

QQ截圖20180617225535.png

需要關(guān)閉服務(wù)端在cmd中按Ctrl+C就好了
成功啟動會Consul代理輸出了一些日志信息。例如版本號,端口號(默認(rèn)是8500)

在瀏覽器中輸入http://localhost:8500/可以進(jìn)入到consul服務(wù)注冊中心
的界面(強烈推薦使用谷歌瀏覽器)

QQ截圖20180617225937.png

SpringCloud與Consul客戶端集成

引入Spring Cloud Consul服務(wù)發(fā)現(xiàn)依賴和web依賴(不然注冊不了)

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

在啟動類中加上@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudConsulApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudConsulApplication.class, args);
    }
}

在配置文件中加入Spring Cloud Consul相關(guān)配置

spring:
  cloud:
    consul:
      host: localhost
      port: 8500
  application:
    name: springcloud-consul
server:
  port: 9999

刷新下服務(wù)注冊中心的頁面

QQ截圖20180617233523.png

可以發(fā)現(xiàn)服務(wù)是注冊上去了,但是服務(wù)狀態(tài)為critical,說明這個服務(wù)還是失敗的

Consul規(guī)定了外部腳本退出碼代表的語義:
正常passing
告警warning
失敗critical

解決方法:

1.需要手動加一個GET方法的健康檢測API

@RestController
public class HealthApi {
    @GetMapping("/health")
    public String health(){
        return "hello consul";
    }
}

然后在配置文件中加上spring.cloud.consul.discovery.health-check-path的路徑

spring:
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        health-check-path: /health
  application:
    name: springcloud-consul
server:
  port: 9999

重新啟動客戶端

QQ截圖20180618105626.png

可以看到我們注冊的服務(wù)已經(jīng)passing 通過了,說明服務(wù)注冊成功
其實在cmd上也可以看到

QQ截圖20180618105934.png

Service 'springcloud-consul' check中可以看到我們自定義的健康檢測和返回結(jié)果
QQ截圖20180618113359.png

Consul用于檢查運行狀況端點的間隔默認(rèn)是10s,每過10秒檢測一次
2.加入actuator依賴(推薦使用)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

不需要改spring.cloud.consul.discovery.health-check-path,
默認(rèn)的就行,默認(rèn)是/actuator/health。

QQ截圖20180618112541.png

通過健康檢測可以看到服務(wù)狀態(tài)是UP,服務(wù)已經(jīng)注冊到Consul

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容