Partager via


.NET .NET Aspire service discovery

Dans cet article, vous allez découvrir comment fonctionne la découverte de service dans un projet .NET.NET Aspire. .NET .NET Aspire inclut des fonctionnalités de configuration de la découverte de service au moment du développement et du test. La fonction de découverte de services fonctionne en fournissant une configuration au format attendu par le résolveur d'endpoints basé sur la configuration du projet AppHost .NET.NET Aspire aux projets de service individuels intégrés au modèle applicatif. For more information, see Service discovery in .NET.

Découverte de service implicite par référence

La configuration de la découverte de services est ajoutée uniquement pour les services référencés par un projet donné. Par exemple, considérez le programme AppHost suivant :

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);

Dans l’exemple précédent, le projet front-end référence le projet de catalogue et le projet de panier . The two WithReference calls instruct the .NET.NET Aspire project to pass service discovery information for the referenced projects (catalog, and basket) into the frontend project.

Points de terminaison nommés

Certains services exposent plusieurs points de terminaison nommés. Les points de terminaison nommés peuvent être résolus en spécifiant le nom du point de terminaison dans la partie hôte de l’URI de requête HTTP, en suivant le format scheme://_endpointName.serviceName. Par exemple, si un service nommé « panier » expose un point de terminaison nommé « tableau de bord », l’URI https+http://_dashboard.basket peut être utilisé pour spécifier ce point de terminaison, par exemple :

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"));

Dans l’exemple précédent, deux classes HttpClient sont ajoutées, une pour le service panier principal et une pour le tableau de bord du service panier.

Points de terminaison nommés à l’aide de la configuration

Avec le programme de résolution de point de terminaison basé sur la configuration, les points de terminaison nommés peuvent être spécifiés dans la configuration en préfixant la valeur de point de terminaison avec _endpointName., où endpointName est le nom du point de terminaison. Par exemple, considérez cette configuration appsettings.json qui a défini un point de terminaison par défaut (sans nom) et un point de terminaison nommé « tableau de bord » :

{
  "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 */
    }
  }
}

In the preceding JSON:

  • Le point de terminaison par défaut, lors de la résolution de https://basket est 10.2.3.4:8080.
  • The "dashboard" endpoint, resolved via https://_dashboard.basket is 10.2.3.4:9999.

Points de terminaison nommés dans .NET.NET Aspire

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

Points de terminaison nommés dans Kubernetes à l’aide de DNS SRV

Lors du déploiement sur Kubernetes, le programme de résolution de point de terminaison de service DNS SRV peut être utilisé pour résoudre les points de terminaison nommés. Par exemple, la définition de ressource suivante entraîne la création d’un enregistrement SRV DNS pour un point de terminaison nommé « default » et un point de terminaison nommé « tableau de bord », tous deux sur le service nommé « panier ».

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

To configure a service to resolve the "dashboard" endpoint on the "basket" service, add the DNS SRV service endpoint resolver to the host builder as follows:

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

Pour plus d’informations, consultez AddServiceDiscoveryCore et AddDnsSrvServiceEndpointProvider.

Le nom de port spécial « default » est utilisé pour spécifier le point de terminaison par défaut, résolu à l’aide de l’URI https://basket.

As in the previous example, add service discovery to an HttpClient for the basket service:

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

De même, le point de terminaison « tableau de bord » peut être ciblé comme suit :

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

Voir aussi