成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

微服務架構:服務注冊和發現組件之Consul使用案例

開發 架構
在微服務架構中,服務注冊是指將服務實例上線并將其相關信息存儲到服務注冊中心,如Consul中,以便其他服務可以通過服務注冊中心找到該服務。

當應用程序采用微服務架構時,系統中的功能被拆分成多個小型的服務,每個服務都是一個獨立的運行單元。這些服務之間需要相互通信,因此需要一個機制來協調不同服務之間的通信。服務注冊和服務發現就是微服務架構中實現服務協調的重要組成部分。

在微服務架構中,服務注冊是指將服務實例上線并將其相關信息存儲到服務注冊中心,如Consul中,以便其他服務可以通過服務注冊中心找到該服務。注冊中心是服務發現的核心,它作為一個中心化的數據庫,維護了所有服務的元數據信息,包括服務名稱、服務地址、端口、協議等。

在服務發現過程中,客戶端需要從服務注冊中心中獲取服務的詳細信息,以便能夠訪問該服務。客戶端可以通過服務注冊中心提供的API進行服務發現,或直接使用服務注冊中心提供的DNS域名解析服務來發現服務。

服務發現呈現以下幾個主要步驟:

服務注冊:服務實例首先向服務注冊中心注冊自己的信息,服務注冊中心將該信息存儲起來,以便其他服務可以通過服務注冊中心找到該服務。

健康檢查:服務注冊中心會定期檢查已注冊的服務實例是否健康,如果發現某個服務實例不可用或異常(如CPU占用率過高、內存使用超過閾值等),則服務注冊中心會將該服務實例從注冊中心中移除。

服務發現:在需要訪問其他服務時,應用程序向服務注冊中心發送查詢請求,服務注冊中心根據查詢條件返回相應的服務實例。應用程序可以根據查詢結果,確定需要訪問的服務實例的IP地址和端口號,并通過這些信息去訪問服務。

負載均衡:在有多個服務實例提供同樣的服務時,服務注冊中心可以通過負載均衡算法來決定哪個服務實例提供服務??蛻舳藢⒄埱蟀l送給被選擇的服務實例,從而實現負載均衡。

Consul是一款開源的服務注冊和發現組件,它提供了服務注冊、服務健康檢查、負載均衡、分布式鍵值存儲等功能,可用于構建高可用、高可靠、高效率的分布式系統。以下是它的主要特點:

服務注冊與發現:應用程序通過向Consul注冊自己的服務,Consul即可自動地發現、識別和定位這些服務。

健康檢查機制:Consul可以周期性地對已注冊的服務進行健康檢查,一旦發現某個服務不可用,即會將其移除并更新服務列表,保證使用者只需要連接到可用的服務。

負載均衡:由于Consul能夠識別和定位所有已注冊的服務,所以在多個可用服務之間進行負載均衡變得非常簡單。

分布式鍵值存儲:Consul提供了一種分布式鍵值存儲的方式,允許應用程序通過簡單的API方式來訪問存儲在Consul中的數據。

多數據中心支持:Consul支持在多個數據中心之間進行服務發現和遠程調用,支持多個數據中心之間的多種服務發現場景,包括跨機房高可用、災備備份等。

Consul的架構非常靈活,它由多個組件組成,包括:

Agent:Agent是運行在每個節點上的代理程序,負責維護節點的狀態和服務注冊信息。Agent有兩種運行模式:Client和Server。Client模式用于輕量級部署,只需要連接到Server模式的節點即可使用服務注冊和發現功能。Server模式是Consul的核心部分,用于維護整個集群的狀態和一致性。

API:Consul提供了HTTP和DNS兩種API方式,使得其他應用程序可以通過API訪問Consul中的數據。HTTP API提供了RESTful接口,支持服務注冊、查詢、健康檢查等功能。DNS API提供了域名解析服務,使得應用程序可以通過域名來發現服務,避免硬編碼IP地址。

UI:Consul提供了可視化界面,用于查看服務的狀態、節點信息、健康檢查等。UI界面可以直觀地展示Consul在分布式服務治理方面的強大功能。

下面是一個使用Consul完成服務注冊和服務發現的.NetCore案例。

首先,需要在項目中添加Consul客戶端庫??梢酝ㄟ^NuGet包管理器搜索并安裝
Microsoft.Extensions.Configuration.Consul、Microsoft.Extensions.DependencyInjection.Consul等庫。

接下來,創建一個服務注冊類,用于完成服務注冊和發現功能。該類應該實現IServiceDiscoveryService接口,如下所示:

public class ConsulServiceDiscovery : IServiceDiscoveryService
{
private readonly IConfiguration _configuration;
private readonly IConsulClient _consulClient;
public ConsulServiceDiscovery(IConfiguration configuration, IConsulClient consulClient)
{
_configuration = configuration;
_consulClient = consulClient;
}
public async Task<bool> RegisterServiceAsync(ServiceInstance instance)
{
var registration = new AgentServiceRegistration
{
ID = instance.Id,
Name = instance.ServiceName,
Address = instance.Host,
Port = instance.Port,
Tags = instance.Tags,
Check = new AgentServiceCheck
{
HTTP = $"http://{instance.Host}:{instance.Port}/{instance.CheckApi}",
Interval = TimeSpan.FromSeconds(10),
}
};
var result = await _consulClient.Agent.ServiceRegister(registration);
return result.StatusCode == HttpStatusCode.OK;
}
public async Task<List<ServiceInstance>> GetServicesAsync(string serviceName)
{
var queryResult = await _consulClient.Health.Service(serviceName);
return queryResult.Response.Select(p => new ServiceInstance
{
Id = p.Service.ID,
ServiceName = p.Service.Service,
Host = p.Service.Address,
Port = p.Service.Port
}).ToList();
}
}

在上述代碼中,IServiceDiscoveryService接口定義了RegisterServiceAsync和GetServicesAsync兩個方法,分別用于服務注冊和服務發現。ConsulServiceDiscovery類實現了IServiceDiscoveryService接口,其中的RegisterServiceAsync方法用于將服務注冊到Consul中心,并配置服務健康檢查,GetServicesAsync方法用于查詢已注冊的服務實例列表。

完成服務注冊和發現類的編寫后,還需要在Startup.cs文件中進行配置。可以使用AddConsul方法來添加服務發現和配置:

public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// add consul for service discovery
services.AddSingleton<IConsulClient, ConsulClient>(p => new ConsulClient(consulConfig =>
{
consulConfig.Address = new Uri(Configuration["Consul:Address"]);
}));
services.AddSingleton<IServiceDiscoveryService, ConsulServiceDiscovery>();
services.AddConsulConfig(Configuration.GetSection("Consul"));
services.AddMvc();
}

在上述代碼中,AddSingleton方法用于向容器中添加服務發現類的實例,AddConsulConfig方法用于從appsettings.json文件中加載Consul配置信息。

最后,在Controller中編寫訪問服務的代碼,如下所示:

public class ValuesController : ControllerBase
{
private readonly IServiceDiscoveryService _serviceDiscoveryService;
public ValuesController(IServiceDiscoveryService serviceDiscoveryService)
{
_serviceDiscoveryService = serviceDiscoveryService;
}
[HttpGet]
[Route("/api/values")]
public async Task<List<string>> Get()
{
var instances = await _serviceDiscoveryService.GetServicesAsync("values_service");
var client = new HttpClient();
var results = new List<string>();
foreach (var instance in instances)
{
var url = $"http://{instance.Host}:{instance.Port}/api/values";
var result = await client.GetStringAsync(url);
results.Add(result);
}
return results;
}
}

在上述代碼中,Get方法通過IServiceDiscoveryService接口獲取了已注冊的服務實例列表,并使用HttpClient訪問了這些服務。

這就是一個簡單的使用Consul完成服務注冊和服務發現的.NetCore案例。

責任編輯:姜華 來源: 今日頭條
相關推薦

2022-01-16 23:10:40

語言服務注冊

2022-01-26 09:36:53

Consul語言微服務

2017-06-25 13:33:25

Spring Clou微服務架構

2022-06-17 12:05:25

微服務注冊

2020-10-14 15:37:04

Goconsul接口

2025-01-20 00:10:00

Go語言Kratos

2022-08-14 07:04:44

微服務架構設計模式

2020-06-29 07:58:18

ZooKeeperConsul 注冊中心

2025-03-31 08:35:00

Eureka微服務架構

2023-09-07 23:25:34

微服務服務發現

2018-08-01 14:20:11

微服務架構人工智能

2021-07-07 05:46:46

運維監控Prometheus

2025-01-09 08:32:50

2018-12-12 09:59:47

微服務架構分布式系統

2023-07-28 09:23:24

微服務架構

2019-07-11 15:25:02

架構運維技術

2019-08-23 10:34:05

微服務Eureka架構

2018-03-26 04:53:46

Serverless微服務架構

2021-07-02 06:54:45

軟件架構模式

2024-01-19 11:57:42

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久久网站 | 91色在线 | 91成人免费电影 | 天天干天天干 | 国产一区二区三区在线 | 亚洲www啪成人一区二区麻豆 | 精品国产乱码久久久久久影片 | 国产精品九九九 | 国产高清视频一区二区 | 国产一区二区 | 亚洲狠狠丁香婷婷综合久久久 | 欧美久久久久 | 91中文字幕| 国产美女一区二区 | 日韩久久精品电影 | 国产欧美日韩精品一区 | 国产一区二区不卡 | 中文字幕一区二区三区在线乱码 | 日韩成人av在线播放 | 99精品国产一区二区三区 | 日韩一区二区三区视频在线观看 | 色眯眯视频在线观看 | 成人精品鲁一区一区二区 | 日韩中文字幕在线视频 | 日韩精品免费 | 夜操| 天天插天天操 | 国产精品18久久久久久久 | 一级片在线视频 | 亚洲视频一区在线 | 午夜国产羞羞视频免费网站 | 欧美综合一区二区三区 | 精品自拍视频在线观看 | 伊人伊人网 | 精品国产一区二区三区久久久蜜月 | 欧美不卡视频 | 久久99精品国产99久久6男男 | 国产丝袜一区二区三区免费视频 | 久久久精选 | 国产精品自产拍在线观看蜜 | 欧美激情黄色 |