Dela via


.NET .NET Aspire tjänsteupptäckning

I den här artikeln får du lära dig hur tjänstidentifiering fungerar i ett .NET.NET Aspire projekt. .NET .NET Aspire innehåller funktioner för att konfigurera tjänstidentifiering vid utveckling och testning. Funktionen för tjänsteupptäckt fungerar genom att tillhandahålla konfiguration i det format som förväntas av den konfigurationsbaserade endpoint-resolvern från .NET.NET Aspire AppHost-projektet till de individuella tjänstprojekten som läggs till i programmodellen. Mer information finns i serviceidentifiering i .NET.

Implicit tjänstupptäckt med referens

Konfiguration för tjänstidentifiering läggs bara till för tjänster som refereras av ett visst projekt. Tänk till exempel på följande AppHost-program:

var builder = DistributedApplication.CreateBuilder(args);

var catalog = builder.AddProject<Projects.CatalogService>("catalog");
var basket = builder.AddProject<Projects.BasketService>("basket");

var frontend = builder.AddProject<Projects.MyFrontend>("frontend")
                      .WithReference(basket)
                      .WithReference(catalog);

I det föregående exemplet refererar frontendprojektet till katalogprojektet och korgprojektet. De två WithReference-anropen instruerar .NET.NET Aspire-projektet att skicka information om tjänstidentifiering för de refererade projekten (katalog, och korg) till frontend-projektet.

Namngivna slutpunkter

Vissa tjänster exponerar flera namngivna slutpunkter. Namngivna slutpunkter kan lösas genom att ange slutpunktsnamnet i värddelen av HTTP-begärande-URI:n enligt formatet scheme://_endpointName.serviceName. Om en tjänst med namnet "basket" till exempel exponerar en slutpunkt med namnet "instrumentpanel" kan URI:n https+http://_dashboard.basket användas för att ange den här slutpunkten, till exempel:

builder.Services.AddHttpClient<BasketServiceClient>(
    static client => client.BaseAddress = new("https+http://basket"));

builder.Services.AddHttpClient<BasketServiceDashboardClient>(
    static client => client.BaseAddress = new("https+http://_dashboard.basket"));

I föregående exempel läggs två HttpClient-klasser till, en för kärnkorgtjänsten och en för korgtjänstens instrumentpanel.

Namngivna slutpunkter med konfiguration

Med den konfigurationsbaserade slutpunktsmatcharen kan namngivna slutpunkter anges i konfigurationen genom att prefixa slutpunktsvärdet med _endpointName., där endpointName är slutpunktsnamnet. Tänk till exempel på den här appsettings.json konfigurationen som definierade en standardslutpunkt (utan namn) och en slutpunkt med namnet "instrumentpanel":

{
  "Services": {
    "basket":
      "https": "https://10.2.3.4:8080", /* the https endpoint, requested via https://basket */
      "dashboard": "https://10.2.3.4:9999" /* the "dashboard" endpoint, requested via https://_dashboard.basket */
    }
  }
}

I det föregående JSON:

  • Standardslutpunkten när du löser https://basket är 10.2.3.4:8080.
  • Endpointen "instrumentpanel", som löses via https://_dashboard.basket är 10.2.3.4:9999.

Namngivna slutpunkter i .NET.NET Aspire

var basket = builder.AddProject<Projects.BasketService>("basket")
    .WithHttpsEndpoint(hostPort: 9999, name: "dashboard");

Namngivna slutpunkter i Kubernetes med DNS SRV

När du distribuerar till Kuberneteskan DNS SRV-tjänstens slutpunktslösare användas för att upplösa namngivna slutpunkter. Följande resursdefinition resulterar till exempel i att en DNS SRV-post skapas för en slutpunkt med namnet "default" och en slutpunkt med namnet "instrumentpanel", båda i tjänsten med namnet "korg".

apiVersion: v1
kind: Service
metadata:
  name: basket
spec:
  selector:
    name: basket-service
  clusterIP: None
  ports:
  - name: default
    port: 8080
  - name: dashboard
    port: 9999

För att konfigurera en tjänst för att lösa slutpunkten "instrumentpanel" på "korg"-tjänsten, lägg till DNS SRV-slutpunktslösaren i värdbygget på följande sätt:

builder.Services.AddServiceDiscoveryCore();
builder.Services.AddDnsSrvServiceEndpointProvider();

Mer information finns i AddServiceDiscoveryCore och AddDnsSrvServiceEndpointProvider.

Det särskilda portnamnet "default" används för att ange standardslutpunkten, som fastställs med hjälp av URI-https://basket.

Precis som i föregående exempel lägger du till tjänstidentifiering i en HttpClient för korgtjänsten:

builder.Services.AddHttpClient<BasketServiceClient>(
    static client => client.BaseAddress = new("https://basket"));

På samma sätt kan slutpunkten "dashboard" riktas på följande sätt:

builder.Services.AddHttpClient<BasketServiceDashboardClient>(
    static client => client.BaseAddress = new("https://_dashboard.basket"));

Se även