Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans cet article, vous allez apprendre à utiliser la Microsoft.Extensions.ServiceDiscovery
bibliothèque. La découverte de services permet aux développeurs d’utiliser des noms logiques au lieu d’adresses physiques (adresse IP et port) pour faire référence à des services externes.
Commencez
Pour commencer à utiliser la découverte de service dans .NET, installez le package NuGet Microsoft.Extensions.ServiceDiscovery .
dotnet add package Microsoft.Extensions.ServiceDiscovery --prerelease
Ou, si vous utilisez le Kit de développement logiciel (SDK) .NET 10+ :
dotnet package add Microsoft.Extensions.ServiceDiscovery --prerelease
Pour plus d’informations, consultez dotnet ajouter un package ou Gérer les dépendances de packages dans les applications .NET.
Exemple d’utilisation
Dans le fichier Program.cs de votre projet, appelez la méthode d'extension AddServiceDiscovery pour ajouter la découverte de services à l'hôte, en configurant les résolveurs de points de terminaison de services par défaut :
builder.Services.AddServiceDiscovery();
Ajoutez la découverte de services à un individu IHttpClientBuilder en appelant la méthode d'extension AddServiceDiscovery
:
builder.Services.AddHttpClient<CatalogServiceClient>(static client =>
{
client.BaseAddress = new("https://catalog");
})
.AddServiceDiscovery();
Vous pouvez également ajouter la découverte de service à toutes les HttpClient instances par défaut :
builder.Services.ConfigureHttpClientDefaults(static http =>
{
// Turn on service discovery by default
http.AddServiceDiscovery();
});
Sélection de schémas lors de la résolution des points de terminaison HTTP(S)
Il est courant d’utiliser HTTP lors du développement et du test d’un service localement et HTTPS lors du déploiement du service. Service Discovery prend en charge cela en permettant de spécifier une liste prioritaire de schémas d’URI dans la chaîne d’entrée fournie à Service Discovery. La découverte de services tentera de résoudre les services pour les schémas dans l'ordre et s'arrêtera lorsqu'un point de terminaison aura été trouvé. Les schémas d’URI sont séparés par un +
caractère, par exemple : "https+http://basket"
. La découverte de service essaie d’abord de trouver des points de terminaison HTTPS pour le "basket"
service, puis de revenir aux points de terminaison HTTP. Si un point de terminaison HTTPS est trouvé, la découverte de service n’inclut pas de points de terminaison HTTP.
Les schémas peuvent être filtrés en configurant les propriétés AllowedSchemes
et AllowAllSchemes
sur ServiceDiscoveryOptions
. La AllowAllSchemes
propriété est utilisée pour indiquer que tous les schémas sont autorisés. Par défaut, AllowAllSchemes
est true
et tous les schémas sont autorisés. Les schémas peuvent être limités en définissant AllowAllSchemes
false
et en ajoutant des schémas autorisés à la AllowedSchemes
propriété. Par exemple, pour autoriser uniquement HTTPS :
services.Configure<ServiceDiscoveryOptions>(options =>
{
options.AllowAllSchemes = false;
options.AllowedSchemes = ["https"];
});
Pour autoriser explicitement tous les schémas, définissez la ServiceDiscoveryOptions.AllowAllSchemes
propriété sur true
:
services.Configure<ServiceDiscoveryOptions>(
options => options.AllowAllSchemes = true);
Résoudre les points de terminaison des services à partir de la configuration
La AddServiceDiscovery
méthode d’extension ajoute par défaut un résolveur de point de terminaison basé sur la configuration.
Ce programme de résolution lit les points de terminaison du système de configuration .NET. La bibliothèque prend en charge la configuration via appsettings.json, les variables d’environnement ou toute autre IConfiguration source.
Voici un exemple illustrant comment configurer des points de terminaison pour le service nommé catalogue via appsettings.json
.
{
"Services": {
"catalog": {
"https": [
"localhost:8080",
"10.46.24.90:80"
]
}
}
}
L’exemple précédent ajoute deux points de terminaison pour le service nommé catalogue : https://localhost:8080
, et "https://10.46.24.90:80"
. Chaque fois que le catalogue est résolu, l’un de ces points de terminaison est sélectionné.
Si la découverte de services a été ajoutée à l'hôte en utilisant la méthode d'extension AddServiceDiscoveryCore sur IServiceCollection, le résolveur de points de terminaison basé sur la configuration peut être ajouté en appelant la méthode d'extension AddConfigurationServiceEndpointProvider sur IServiceCollection
.
Paramétrage
Le programme de résolution de configuration est configuré à l’aide de la ConfigurationServiceEndpointProviderOptions classe, qui offre ces options de configuration :
SectionName : nom de la section de configuration qui contient des points de terminaison de service. C'est par défaut
"Services"
.ApplyHostNameMetadata : délégué utilisé pour déterminer si les métadonnées de nom d’hôte doivent être appliquées aux points de terminaison résolus. Elle est par défaut une fonction qui retourne
false
.
Pour configurer ces options, vous pouvez utiliser la méthode d'extension Configure
sur la IServiceCollection
ou le fichier Startup
de la classe Program
de votre application :
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");
};
});
L’exemple précédent montre comment définir un nom de section personnalisé pour vos points de terminaison de service et fournir une logique conditionnelle personnalisée pour l’application des métadonnées de nom d’hôte.
Résoudre les points de terminaison de service à l’aide de la découverte de service fournie par la plateforme
Certaines plateformes, telles qu’Azure Container Apps et Kubernetes (lorsqu’elles sont configurées en conséquence), offrent des fonctionnalités de découverte de services sans nécessiter de bibliothèque de client de découverte de services. Dans les cas où une application est déployée dans de tels environnements, l’utilisation des fonctionnalités intégrées de la plateforme peut être avantageuse. Le résolveur pass-through est conçu pour faciliter ce scénario. Il permet l’utilisation d’autres programmes de résolution, tels que la configuration, dans différents environnements, tels que l’ordinateur d’un développeur. Il est important de réaliser cette flexibilité sans avoir besoin de modifications de code ou de mise en œuvre de gardes conditionnels.
Le programme de résolution directe n’effectue aucune résolution externe et résout plutôt les points de terminaison en retournant le nom du service d’entrée représenté sous la forme d’un DnsEndPoint.
Le fournisseur pass-through est configuré par défaut lors de l'ajout de la découverte de services via la méthode d'extension AddServiceDiscovery
.
Si la découverte de services a été ajoutée à l'hôte en utilisant la méthode d'extension AddServiceDiscoveryCore
sur IServiceCollection
, le fournisseur pass-through peut être ajouté en appelant la méthode d'extension AddPassThroughServiceEndpointProvider sur IServiceCollection
.