Megosztás a következőn keresztül:


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 AllowedSchemesAllowAllSchemes 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 IServiceCollectionmeghí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 falsefü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 IServiceCollectionbekapcsolásával AddPassThroughServiceEndpointProvider vehető fel.

Lásd még