[英]How to update HttpClient base address at runtime in ASP.net core
我使用 ASP.net 核心 API 創建了幾個微服務
這些微服務之一返回其他微服務的確切地址
如果地址更改,如何在不重新啟動的情況下更新任何這些微服務的地址
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient("MainMicroservice", x =>
{
x.BaseAddress = new Uri("http://mainmicroservice.com");
});
services.AddHttpClient("Microservice1", x =>
{
x.BaseAddress = new Uri("http://microservice1.com");
});
services.AddHttpClient("Microservice2", x =>
{
x.BaseAddress = new Uri("http://microservice2.com");
});
services.AddHttpClient("Microservice3", x =>
{
x.BaseAddress = new Uri("http://microservice3.com");
});
}
}
public class Test
{
private readonly IHttpClientFactory _client;
public Test(IHttpClientFactory client)
{
_client = client;
}
public async Task<string> Test()
{
var repeat = false;
do
{
try
{
return await _client
.CreateClient("Microservice1")
.GetStringAsync("Test")
.ConfigureAwait(false);
}
catch (HttpRequestException e) when (e.StatusCode == HttpStatusCode.NotFound)
{
var newAddress = await _client
.CreateClient("MainMicroservice")
.GetStringAsync("Microservice1")
.ConfigureAwait(false);
//todo change address of microservice1
repeat = true;
}
} while (repeat);
}
}
如果您遲早(更早地)構建基於微服務的解決方案,您將遇到一個服務需要與另一個服務通信的情況。 為了做到這一點,調用者必須知道目標微服務在網絡中的確切位置,它們在其中運行。
您必須以某種方式提供目標微服務偵聽請求的IP 地址和端口。 您可以使用配置文件或環境變量來做到這一點,但這種方法有一些缺點和限制。
因此我們需要引入服務發現。 服務發現是一種允許服務找到彼此的網絡位置的機制。 這種模式有許多可能的實現。
我們有兩種類型的服務發現:客戶端和服務器端,您可以在 ASP.NET 項目中找到一個很好的 NuGet package 來處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.