Szolgáltatásfelderítés a .NET-ben
Ebből a cikkből megtudhatja, hogyan használhatja a tárat Microsoft.Extensions.ServiceDiscovery
. A szolgáltatásfelderítéssel a fejlesztők logikai neveket használhatnak a fizikai címek (IP-cím és port) helyett a külső szolgáltatásokra való hivatkozáshoz.
Első lépések
A szolgáltatásfelderítés .NET-ben való megkezdéséhez telepítse a Microsoft.Extensions.ServiceDiscovery NuGet csomagot.
dotnet add package Microsoft.Extensions.ServiceDiscovery --prerelease
További információ: dotnet add package or Manage package dependencies in .NET applications.
Példa használatra
A projekt Program.cs fájljában hívja meg a AddServiceDiscovery bővítménymetódust a szolgáltatásfelderítés gazdagéphez való hozzáadásához, és konfigurálja az alapértelmezett szolgáltatásvégpont-feloldókat:
builder.Services.AddServiceDiscovery();
Szolgáltatásfelderítés hozzáadása egy személyhez IHttpClientBuilder a bővítmény metódus meghívásával AddServiceDiscovery
:
builder.Services.AddHttpClient<CatalogServiceClient>(static client =>
{
client.BaseAddress = new("https://catalog");
})
.AddServiceDiscovery();
Másik lehetőségként alapértelmezés szerint az összes HttpClient példányhoz hozzáadhat szolgáltatásfelderítést:
builder.Services.ConfigureHttpClientDefaults(static http =>
{
// Turn on service discovery by default
http.AddServiceDiscovery();
});
Séma kiválasztása HTTP-végpontok feloldásakor
A szolgáltatás helyi fejlesztése és tesztelése során gyakran használják a HTTP-t, valamint a HTTPS-t a szolgáltatás üzembe helyezésekor. A Service Discovery ezt azzal támogatja, hogy lehetővé teszi az URI-sémák prioritási listájának megadását a Service Discoverynek adott bemeneti sztringben. A Service Discovery megkísérli a sémák szolgáltatásainak rendezését, és egy végpont megtalálása után leáll. Az URI-sémákat egy +
karakter választja el egymástól, például: "https+http://basket"
. A Service Discovery először megpróbál HTTPS-végpontokat keresni a "basket"
szolgáltatáshoz, majd vissza fog esni a HTTP-végpontokra. Ha bármilyen HTTPS-végpont található, a Service Discovery nem fog HTTP-végpontokat tartalmazni.
A sémák szűréséhez konfigurálja a AllowedSchemes
AllowAllSchemes
tulajdonságokat ServiceDiscoveryOptions
. A AllowAllSchemes
tulajdonság azt jelzi, hogy az összes séma engedélyezett. Alapértelmezés szerint az istrue
, AllowAllSchemes
és minden séma engedélyezett. A sémák korlátozhatók az engedélyezett sémák false
beállításával AllowAllSchemes
és a AllowedSchemes
tulajdonsághoz való hozzáadásával. Ha például csak HTTPS-t szeretne engedélyezni:
services.Configure<ServiceDiscoveryOptions>(options =>
{
options.AllowAllSchemes = false;
options.AllowedSchemes = ["https"];
});
Az összes séma explicit engedélyezéséhez állítsa a tulajdonságot a ServiceDiscoveryOptions.AllowAllSchemes
következőre true
:
services.Configure<ServiceDiscoveryOptions>(
options => options.AllowAllSchemes = true);
Szolgáltatásvégpontok feloldása konfigurációból
A AddServiceDiscovery
bővítménymetódus alapértelmezés szerint hozzáad egy konfigurációalapú végpontfeloldót.
Ez a feloldó beolvassa a végpontokat a .NET konfigurációs rendszerből. A kódtár appsettings.json, környezeti változókon vagy bármely más IConfiguration forráson keresztül támogatja a konfigurációt.
Íme egy példa, amely bemutatja, hogyan konfigurálhatók végpontok a katalógus nevű szolgáltatáshoz a következővelappsettings.json
:
{
"Services": {
"catalog": {
"https": [
"localhost:8080",
"10.46.24.90:80"
]
}
}
}
Az előző példa két végpontot ad hozzá a katalógus nevű szolgáltatáshoz: https://localhost:8080
és "https://10.46.24.90:80"
. A katalógus minden feloldásakor a rendszer kiválasztja az egyik végpontot.
Ha a szolgáltatásfelderítés a bővítménymetódussal lett hozzáadva a AddServiceDiscoveryCore gazdagéphezIServiceCollection, a konfigurációalapú végpontfeloldó a bővítmény metódusának IServiceCollection
meghívásával AddConfigurationServiceEndpointProvider adható hozzá.
Konfiguráció
A konfigurációfeloldó az ConfigurationServiceEndpointProviderOptions osztály használatával van konfigurálva, amely az alábbi konfigurációs lehetőségeket kínálja:
SectionName: A szolgáltatásvégpontokat tartalmazó konfigurációs szakasz neve. Alapértelmezés szerint a .
"Services"
ApplyHostNameMetadata: A feloldott végpontokra a gazdagépnév metaadatainak alkalmazásához használt meghatalmazott. Alapértelmezés szerint egy visszaadott
false
függvény.
A beállítások konfigurálásához használhatja a Configure
bővítménymetódust az IServiceCollection
alkalmazás osztályában vagy Program
fájljábanStartup
:
var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<ConfigurationServiceEndPointResolverOptions>(
static options =>
{
options.SectionName = "MyServiceEndpoints";
// Configure the logic for applying host name metadata
options.ApplyHostNameMetadata = static endpoint =>
{
// Your custom logic here. For example:
return endpoint.EndPoint is DnsEndPoint dnsEp
&& dnsEp.Host.StartsWith("internal");
};
});
Az előző példa bemutatja, hogy a szolgáltatásvégpontokhoz egyéni szakasznevet állít be, és egyéni feltételes logikát biztosít a gazdagépnév metaadatainak alkalmazásához.
Szolgáltatásvégpontok feloldása platform által biztosított szolgáltatásfelderítéssel
Bizonyos platformok, például az Azure Container Apps és a Kubernetes (ennek megfelelően konfigurálva) szolgáltatásfelderítési képességeket kínálnak anélkül, hogy szolgáltatásfelderítési ügyfélkódtárat igényelnek. Azokban az esetekben, amikor egy alkalmazás ilyen környezetben van üzembe helyezve, a platform beépített funkcióinak használata előnyös lehet. Az átmenő feloldó úgy lett kialakítva, hogy megkönnyítse ezt a forgatókönyvet. Lehetővé teszi az alternatív feloldók, például a konfiguráció használatát különböző környezetekben, például egy fejlesztő gépén. Fontos, hogy ez a rugalmasság kódmódosítások vagy feltételes őrök alkalmazása nélkül érhető el.
Az átmenő feloldó nem végez külső feloldást, hanem a végpontokat a bemeneti szolgáltatás nevének DnsEndPointvisszaadásával oldja fel.
Az átmenő szolgáltató alapértelmezés szerint konfigurálva van a szolgáltatásfelderítés bővítménymetóduson keresztüli AddServiceDiscovery
hozzáadásakor.
Ha a szolgáltatásfelderítés a bővítménymetódussal lett hozzáadva a AddServiceDiscoveryCore
gazdagéphezIServiceCollection
, az átmenő szolgáltató a bővítménymetódus IServiceCollection
bekapcsolásával AddPassThroughServiceEndpointProvider vehető fel.