1. 程式人生 > >Consul 服務註冊與服務發現

Consul 服務註冊與服務發現

1. 服務註冊

對 Consul 進行服務註冊之前,需要先部署一個服務站點,我們可以使用 ASP.NET Core 建立 Web 應用程式,並且部署到 Ubuntu 伺服器上。

ASP.NET Core Hell World 應用程式示例程式碼,只需要三個檔案,Startup.cs程式碼:

public class Startup
{
    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.Run(async (context) =>
        {
            await context.Response.WriteAsync("Hello World!");
        });
    }
}

Program.cs程式碼:

public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseStartup<Startup>()
            .UseUrls("http://*:5000")
            .Build();

        host.Run();
    }
}

project.json配置:

{
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.1"
    },
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.Extensions.Logging.Console": "1.0.0"
  },
  
  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    }
  },

  "runtimes": {
    "ubuntu.14.04-x64": {},
    "osx.10.11-x64": {},
    "win8-x64": {}
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  }
}

將這三個檔案,使用命令傳輸到 Ubuntu 伺服器,如下:

$ scp -r ~/documents/hwapp_web [email protected]:~/hwapp_web

傳輸好之後,使用dotnet *命令程式包還原、構建、啟動站點。

然後,在 Ubuntu 伺服器建立一個consul.d檔案目錄:

$ sudo mkdir /etc/consul.d

配置 Consul 初始化的時候,-config-dir需要指向上面建立的目錄:

consul agent -data-dir /tmp/consul -node=consul-client-1 -bind=10.9.10.173 -dc=dc1 -config-dir=/etc/consul.d

Consul 會載入/etc/consul.d目錄下所有*.josn配置檔案,比如我們在此目錄下,建立這樣一個hwapp_web.json配置檔案(針對hwapp_web服務):

{
  "service": {
    "name": "hwapp_web",
    "tags": ["master"],
    "address": "10.9.10.173",
    "port": 5000,
    "checks": [
      {
        "http": "http://10.9.10.173:5000/health",
        "interval": "10s"
      }
    ]
  }
}

http://10.9.10.173:5000/health是健康檢查的路徑,上面我們建立的hwapp_web專案並沒有實現,為防止報錯,你可以改為http://10.9.10.173:5000

另外,如果在配置 Consul 的時候,出現了下面錯誤:

==> Error decoding '/etc/consul.d/hwapp_web.json': invalid character 'ï' looking for beginning of value

錯誤的原因是檔案編碼問題,需要將 Encoding 修改為ANSI編碼(可以用 TXT 修改)。

配置好之後,就可以通過 Consul 後臺:http://localhost:8500,檢視新增的服務資訊了:

2. 服務發現

服務註冊好之後,需要進行發現才能進行服務之間的呼叫,最終需要知曉服務具體在哪臺伺服器上,也就是需要發現伺服器的 IP,Consul 服務發現有兩種方式:

  • DNS API
  • HTTP API

2.1 DNS API

使用 DNS API 方式進行服務發現,需要知道服務 DNS 的具體名稱,預設情況下,所有註冊服務的 DNS 名稱為ServerName.service.consul,這個名稱空間也可以進行手動配置

使用下面命令進行服務發現:

$ dig @127.0.0.1 -p 8600 hwapp_web.service.consul

; <<>> DiG 9.8.3-P1 <<>> @127.0.0.1 -p 8600 hwapp_web.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12340
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;hwapp_web.service.consul.  IN  A

;; ANSWER SECTION:
hwapp_web.service.consul. 0 IN  A   10.9.10.173

;; Query time: 4 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Fri Dec 30 15:30:22 2016
;; MSG SIZE  rcvd: 58

可以看到,一個服務被發現了(hwapp_web),並且可以得到此服務所在的具體 IP(10.9.10.173)。

包含更詳細資訊的服務發現命令(包含服務埠):

$ dig @127.0.0.1 -p 8600 hwapp_web.service.consul SRV

; <<>> DiG 9.8.3-P1 <<>> @127.0.0.1 -p 8600 hwapp_web.service.consul SRV
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3174
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;hwapp_web.service.consul.  IN  SRV

;; ANSWER SECTION:
hwapp_web.service.consul. 0 IN  SRV 1 1 5000 consul-worker-1.node.dc1.consul.

;; ADDITIONAL SECTION:
consul-worker-1.node.dc1.consul. 0 IN   A   10.9.10.173

;; Query time: 2 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Fri Dec 30 15:33:59 2016
;; MSG SIZE  rcvd: 103

可以看到,hwapp_web服務的埠為5000

2.1 HTTP API

HTTP API 進行服務發現,非常簡單,執行下面命令,就可以了:

$ curl http://localhost:8500/v1/catalog/service/hwapp_web
[{"Node":"consul-worker-1","Address":"10.9.10.173","TaggedAddresses":{"lan":"10.9.10.173","wan":"10.9.10.173"},"ServiceID":"hwapp_web","ServiceName":"hwapp_web","ServiceTags":["master"],"ServiceAddress":"10.9.10.173","ServicePort":5000,"ServiceEnableTagOverride":false,"CreateIndex":1361,"ModifyIndex":1361}]

返回的是一個 JSON 資訊,你可以手動在瀏覽器輸入http://localhost:8500/v1/catalog/service/hwapp_web 查詢,地址中最後的hwapp_web是服務的名稱。

Consul 基本服務發現就是上面兩種,當然,你也可以基於它們,寫針對不同語言和平臺的 SDK,以便應用程式進行呼叫。

參考地址:

相關推薦

consul服務註冊服務發現的巨坑

consul 註冊 服務註冊 最近使用consul作為項目的服務註冊與服務發現的基礎功能。在塔建集群使用中遇到一些坑,下面一個個的記錄下來。 consul集群多node consul集群的node也就是我們所說的consul實例。集群由多個node組成,為了集群的可用性,需要超過半數的node啟用

Consul 服務註冊服務發現

1. 服務註冊 對 Consul 進行服務註冊之前,需要先部署一個服務站點,我們可以使用 ASP.NET Core 建立 Web 應用程式,並且部署到 Ubuntu 伺服器上。 ASP.NET Core Hell World 應用程式示例程式碼,只需要三個檔案,Startup.cs程式碼: public c

SpringCloud服務註冊服務發現之Eureka

sco utf-8 info 都沒有 轉移 .org 只需要 1.4 AI   Eureka是SpringCloud Netflix的子模塊之一,用於雲端的服務發現,服務定位,實現雲端中間層服務發現和故障轉移。服務註冊與發現對於微服務系統來說十分的重要,有了服務註冊與發現,

Spring Cloud入門:服務註冊服務發現

文章例項使用的Spring Cloud版本為Finchley.SR1,Spring Boot版本為2.0.4。 1 Spring Cloud Eureka(服務註冊與發現) Spring Cloud Eureka 是Spring Cloud Netflix專案下的服務治

Java架構學習(四十)SpringCloud基礎&網站架構演變&微服務架構概述&SpringCloud概述&服務註冊服務發現&搭建註冊中心Euraka&rest和fegin呼叫原理

一、網站架構演變過程 微服務架構 為什麼出現了SpringCloud 網站架構模式: 單點應用---->分散式系統面向於服務架構(SOA)體系 webservice---->微服務架構 web專案三層架構 如果在網際網路公司中,使用傳統架構技術

SpringCloud筆記(一)服務註冊服務發現

目錄 1、Spring Cloud概述 2、環境搭建 2.1 搭建註冊中心eureka-server  pom.xml application.yml 啟動類: 2.2 註冊服務提供者springcloud-producer pom.xml appl

springcloud Eureka 服務註冊消費發現(基於springboot搭建)

1.首先加入Maven依賴 1.springboot的依賴 <!--Springboot--> <dependency> <groupId>org.springframework.boot</groupId> <

跟我學Spring Cloud(Finchley版)-06-服務註冊服務發現-Eureka深入

在跟我學Spring Cloud(Finchley版)-05-服務註冊與服務發現-Eureka入門 一節中,已經編寫了一個Eureka Server,並將服務提供者與消費者都註冊到了Eureka Server上。 本節,來深入探討Eureka的高階特性。 Eureka原理 本

跟我學Spring Cloud(Finchley版)-05-服務註冊服務發現-Eureka入門

本節講解基於Eureka的服務發現。 Eureka簡介 Eureka是Netflix開源的服務發現元件,本身是一個基於REST的服務,包含Server和Client兩部分,Spring Cloud將它整合在子專案Spring Cloud Netflix中。 拓展閱讀

跟我學Spring Cloud(Finchley版)-04-服務註冊服務發現-原理剖析

第2節( 跟我學Spring Cloud(Finchley版)-02-構建分散式應用 )說過: 地址硬編碼問題——電影微服務中將使用者微服務的地址寫死,如果使用者微服務地址發生變化,難道要重新上線電影微服務嗎? 本節來解決該問題。 不妨先思考一下,怎樣才能讓服務

03.Spring Cloud學習筆記之服務註冊服務發現元件Eureka

前言 從本篇部落格開始將正式進入Spring Cloud的實戰部分,因為博主用了很長時間的Dubbo,並且Spring Cloud和Dubbo都是微服務框架,它們有很多相似之處,所以可能在部落格中提及進行類比,如果沒有接觸過Dubbo的朋友直接略過該部分內容即

SpringCloud實戰之初級入門(二)— 服務註冊服務呼叫

目錄 1.環境介紹 2.服務提供 2.1 建立工程 2.2 修改配置檔案 2.3 修改啟動檔案 2.5 親測注意事項 3.服務呼叫 3.1 建立工程 3.2 修改配置檔案 3.3 修改啟動檔案 3.4 建立第一

SpringCloud實戰之初級入門(二)— 服務註冊服務調用

com turn ace 如何使用 method png 描述 cal 愛奇藝 目錄 1.環境介紹 2.服務提供 2.1 創建工程 2.2 修改配置文件 2.3 修改啟動文件 2.5 親測註意事項 3.服務調用 3.1 創建工程 3.2 修改配置文件 3.3 修改啟動文

服務~Consul服務註冊發現

erlang 中心 repr src 微服務 一個 png proc 集群 服務發現是基於微服務架構的關鍵原則之一。嘗試配置每個客戶端或某種形式的約定可能非常困難,可以非常脆弱。Consul通過HTTP API和DNS提供服務發現服務。Spring Cloud Consul

構建微服務架構Spring Cloud:服務註冊發現(Eureka、Consul

comm 簡介 foundry 架構 eas args 包含 什麽 其他 Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全

基於 Consul 實現 MagicOnion(GRpc) 服務註冊發現

override 打包 git second oms 鏡像 包括 red iap 0.簡介 0.1 什麽是 Consul Consul是HashiCorp公司推出的開源工具,用於實現分布式系統的服務發現與配置。 這裏所謂的服務,不僅僅包括常用的 Api 這些服務,也包括

consul服務註冊發現應用實戰

服務 contact 說明 點名 any rec master 自身 技術 上一講;講到consul發現的模板形式,這一講我們聊一聊比較基礎的consul的服務註冊與發現,並且使用bind代理給服務做負載均衡,這個功能也是後面要補充的redis + consul 或

關於SpringCloud微服務雲架構構建B2B2C電子商務平臺分析:服務註冊發現(Eureka、Consul

Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。 Spring

Spring Cloud構建微服務架構:服務註冊發現(Eureka、Consul

Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。 Spring Cloud包含

.netcore consul實現服務註冊發現-集群完整版

template 項目 通過 nts 執行 官方 測試 als zook 原文:.netcore consul實現服務註冊與發現-集群完整版 一、Consul的集群介紹 ?