découverte de service .NET.NET Aspire
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. Pour plus d’informations, consultez la découverte de services dans .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 . Les deux appels WithReference indiquent au projet .NET.NET Aspire de transmettre les informations de découverte de service pour les projets référencés (catalogueet panier ) au projet de front-end.
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 scheme+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 */
}
}
}
Dans la précédente JSON:
- Le point de terminaison par défaut, lors de la résolution de
https://basket
est10.2.3.4:8080
. - Le point de terminaison du « tableau de bord », qui est résolu via
https://_dashboard.basket
, est10.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
Pour configurer un service pour résoudre l'endpoint « dashboard » sur le service « panier », ajoutez le résolveur d'endpoint de service DNS SRV au builder d'hôtes comme suit :
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
.
Comme dans l’exemple précédent, ajoutez la découverte du service à un HttpClient
pour le service de panier :
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
- Découverte de service dans .NET
- effectuer des requêtes HTTP avec la classe HttpClient
- IHttpClientFactory avec .NET