LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

使用 Microsoft.Extensions.ServiceDiscovery 進行服務發現并調用

freeflydom
2024年9月10日 9:24 本文熱度 704

簡介

在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Microsoft.Extensions.ServiceDiscovery。這個包出自 Aspire 項目,提供了一個簡便的方式在 .NET 中實現服務發現。

安裝 Nuget 包

首先,需要安裝 Microsoft 提供的 Service Discovery 包。使用以下命令添加包到你的項目中:

dotnet add package Microsoft.Extensions.ServiceDiscovery

這一步確保你的項目具有使用 Service Discovery 所需的依賴項。

配置和注冊服務

接下來,需要在項目中配置和注冊 Service Discovery。打開 Program.cs 或 Startup.cs 文件,并添加以下代碼:

builder.Services.AddServiceDiscovery();

builder.Services.ConfigureHttpClientDefaults(static http =>

{

    http.AddServiceDiscovery();

});

這段代碼將 Service Discovery 注冊到依賴注入容器中,并配置默認的 HTTP 客戶端使用 Service Discovery。

配置服務端點

為了讓 Service Discovery 知道如何找到其他服務,需要在配置文件(如 appsettings.json)中定義服務端點。例如:

{

  "Services": {

    "weatherReport": {

      "http": [

        "localhost:5089",

        "127.0.0.1:5089"

      ],

      "https": []

    }

  }

}

在這個配置中,我們定義了名為 weatherReport 的服務的 HTTP 端點。Service Discovery 將使用這些信息來查找和訪問該服務。

使用服務名進行 HTTP 調用

配置完成后,可以通過服務名稱進行 HTTP 調用。以下代碼展示了如何使用 IHttpClientFactory 進行服務調用:

app.MapGet("/report", async (IHttpClientFactory factory) =>

{

    const string serviceName = "weatherReport";

    var client = factory.CreateClient();

    var response = await client.GetAsync($"http://{serviceName}/weatherforecast");

    var content = await response.Content.ReadAsStringAsync();


    return content;

});

這段代碼創建了一個 HTTP 客戶端,通過服務名 weatherReport 發起請求,并返回響應內容。

啟動服務后嘗試進行調用:

通過觀察日志可以看到 http://weatherreport/weatherforecast 被轉換成 http://127.0.0.1:5089 或 http://localhost:5089 的 http 調用。

負載均衡

如果服務配置了多個 endpoint 。 那么進行服務調用的時候我們往往需要按實際情況配置 Load-balancing 的策略:

builder.Services.AddHttpClient<CatalogServiceClient>(

    static client => client.BaseAddress = new("http://weatherReport"));

  .AddServiceDiscovery(RandomServiceEndpointSelector.Instance);

  • PickFirstServiceEndpointSelectorProvider.Instance: 總是調用第一個

  • RoundRobinServiceEndpointSelectorProvider.Instance: 輪詢調用

  • RandomServiceEndpointSelectorProvider.Instance: 隨機調用

  • PowerOfTwoChoicesServiceEndpointSelectorProvider.Instance: 解釋太長看英文原文吧。Power-of-two-choices, which attempts to pick the least heavily loaded endpoint based on the Power of Two Choices algorithm for distributed load balancing, degrading to randomly selecting an endpoint when either of the provided endpoints do not have the IEndpointLoadFeature

總結

Service Discovery 是實現微服務架構的重要組件。在 .NET 中,通過簡單的配置和使用,可以不用 hardcode IP 跟 port 而使用服務名,可以大大簡化服務間的調用。同時還能配置不同的調用策略,進行負載均衡。

作者:Agile.Zhou
出處:https://www.cnblogs.com/kklldog/p/18403778/service-discovery
版權:本作品采用「署名-非商業性使用-相同方式共享 4.0 國際」許可協議進行許可。


該文章在 2024/9/10 9:28:08 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
日韩中文无线码免费观看 | 日本高新在线亚洲视频观看 | 日本玖玖资源在线一区 | 亚洲福利网入口久久 | 亚洲亚洲大片亚洲一级高清 | 欧美中文字幕一区二区三区 |