日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Consul 服务注册与服务发现

發布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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=398940public 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 vagrant@10.9.10.173:~/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 入門 03 - 注冊服務

相關文章:

  • 使用C# 和Consul進行分布式系統協調

  • Consul入門

原文地址:?http://www.cnblogs.com/xishuai/p/services-registery-and-discovery-by-consul.html


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

總結

以上是生活随笔為你收集整理的Consul 服务注册与服务发现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。