Ajoute la prise en charge de la configuration des applications de base .NET à l'aide du consul. Fonctionne très bien avec Git2Consul.
ConvertConsulKVPairToConfig Ajoutez Winton.Extensions.Configuration.Consul aux dépendances de votre projet, soit via le gestionnaire de package NuGet, soit en tant que PackageReference dans le fichier CSPROJ.
La bibliothèque fournit une méthode d'extension appelée AddConsul pour IConfigurationBuilder de la même manière que les autres fournisseurs de configuration. L' IConfigurationBuilder est généralement configuré dans le Program ou la classe Startup pour une application Core ASP.NET. Voir la documentation de Microsoft pour plus d'informations sur IConfigurationBuilder .
Un exemple minimal est illustré ci-dessous:
builder
. AddConsul ( $ " { env . ApplicationName } / { env . EnvironmentName } " ) ; En supposant que l'application s'exécute dans l'environnement «développement» et que le nom de l'application est «site Web», cela chargera un objet de configuration JSON à partir du Website/Development dans Consul.
AddConsul a une surcharge avec un troisième paramètre supplémentaire d' Action<IConsulConfigurationSource> qui permet à la définition des options décrites ci-dessous.
ConsulConfigurationOptions
Une Action<ConsulClientConfiguration> qui peut être utilisée pour configurer le client consul sous-jacent.
ConsulHttpClientHandlerOptions
Une Action<HttpClientHandler> qui peut être utilisée pour configurer les options de gestionnaire HTTP du client du Consul sous-jacentes.
ConsulHttpClientOptions
Une Action<HttpClient> qui peut être utilisée pour configurer les options HTTP du client du Consul sous-jacentes.
KeyToRemove
La partie de la touche Consul pour supprimer des touches de configuration. Par défaut, lorsque la configuration est analysée, les touches sont créées en supprimant la touche racine dans le consul où se trouve la configuration. Cela est par défaut à Key .
OnLoadException
Une Action<ConsulLoadExceptionContext> qui peut être utilisée pour configurer comment les exceptions lancées pendant la première charge doivent être gérées.
OnWatchException
Un Func<ConsulWatchExceptionContext, TimeSpan> qui peut être utilisé pour configurer la façon dont les exceptions lancées lors de la surveillance des modifications devraient être gérées. Le TimeSpan qui est retourné est utilisé pour définir un retard avant de réessayer. Le ConsulWatchExceptionContext fournit des données qui peuvent être utilisées pour implémenter une stratégie de back-off ou pour annuler complètement la regard.
Optional
Un bool qui indique si la configuration est facultative. Si false , il lancera pendant la première charge si la configuration est manquante pour la touche donnée. Par défaut est false .
Parser
L'analyseur à utiliser, qui doit correspondre au format de la configuration stockée dans Consul. Par défaut à JsonConfigurationParser . Soit utiliser ceux sous Winton.Extensions.Configuration.Consul.Parsers ou créer le vôtre en mettant en œuvre IConfigurationParser .
PollWaitTime
Le temps que le client doit attendre avant de synchroniser lors de l'interrogation pour les modifications. Si cela est réglé trop bas, cela peut entraîner des demandes excessives émises au consul. Remarque Ce paramètre n'affecte pas la rapidité avec laquelle les mises à jour se propagent, car lorsqu'une valeur modifie la requête de sondage longue renvoie immédiatement. Il est préférable de considérer cela comme la fréquence avec laquelle il émet des appels dans la longue boucle de sondage dans le cas où il n'y a pas de changement. Par défaut à 5 minutes.
ReloadOnChange
Un bool indiquant s'il faut recharger la configuration lorsqu'elle change dans le consul. Si elle true , il regarde la clé configurée pour les modifications. Lorsqu'un changement se produit, la configuration sera rechargée de manière asynchrone et l' IChangeToken sera déclenchée pour signaler que la configuration a été rechargée. Par défaut est false .
ConvertConsulKVPairToConfig
Une Func<KVPair, IEnumerable<KeyValuePair<string, string>>> qui vous donne un contrôle complet sur l'analyse des clés de consul entièrement qualifiées et des valeurs de consul brutes; L'implémentation par défaut sera:
Parser configuré pour analyser les valeurs du consulKeyToRemove configuré des touches Consul Lorsque vous définissez ce membre, vous contournez la clé par défaut et le traitement par défaut et Parser et KeyToRemove n'ont aucun effet à moins que votre fonction ConvertConsulKVPairToConfig les utilise.
Par défaut, ce fournisseur de configuration chargera toutes les paires de valeurs de clé de Consul sous la touche racine spécifiée, mais par défaut, elle suppose que les valeurs des touches de feuille sont codées en JSON.
Prenez l'exemple suivant d'une instance particulière du magasin Consul KV:
- myApp/
- auth/
{
"appId": "guid",
"claims": [
"email",
"name"
]
}
- logging/
{
"level": "warn"
}
Dans ce cas, nous pourrions ajouter le consul comme source de configuration comme tel:
var configuration = builder
. AddConsul ( "myApp" , cancellationToken )
. Build ( ) ; La configuration résultante contiendrait des sections pour auth et logging . En tant qu'exemple concret, configuration.GetValue<string>("logging:level") retournerait "warn" et configuration.GetValue<string>("auth:claims:0") renverrait "email" .
Parfois, cependant, la configuration dans le consul est stockée comme un ensemble de clés élargies. Par exemple, des outils tels que consul-cli Charge Config dans ce format.
La configuration dans ce cas peut être considérée comme une arborescence sous une clé racine spécifique dans le consul. Par exemple, en continuant avec l'exemple ci-dessus, la configuration serait stockée comme suit:
- myApp/
- auth/
- appId/
"guid"
- claims/
0/
"email"
1/
"name"
- logging/
- level/
"warn"
Comme indiqué ci-dessus, ce fournisseur de configuration traite par défaut des touches récursives. La seule différence ici est que les valeurs ne sont plus codées sous forme de JSON. Par conséquent, afin de charger cette configuration, l'analyseur doit être modifié. Cela peut être fait comme lors de l'ajout du fournisseur de configuration:
builder
. AddConsul (
"myApp" ,
options =>
{
options . Parser = new SimpleConfigurationParser ( ) ;
} ) ; Le SimpleConfigurationParser prévoit de rencontrer une valeur scalaire à chaque clé de feuille de l'arbre.
Si vous devez prendre en charge à la fois les clés élargies et les valeurs JSON, cela peut être réalisé en les mettant sous différentes clés racine et en ajoutant plusieurs sources de configuration. Par exemple:
builder
. AddConsul (
"myApp/expandedKeys" ,
options =>
{
options . Parser = new SimpleConfigurationParser ( ) ;
} )
. AddConsul ( "myApp/jsonValues" , cancellationToken ) ;ConvertConsulKVPairToConfig Parfois, vous avez peut-être besoin de plus de contrôle sur la conversion des paires de consul KV brutes en données IConfiguration . Dans ce cas, vous pouvez définir une fonction ConvertConsulKVPairToConfig personnalisée:
builder
. AddConsul (
"myApp" ,
options =>
{
options . ConvertConsulKVPairToConfig = kvPair =>
{
var normalizedKey = kvPair . Key
. Replace ( "base/key" , string . Empty )
. Replace ( "__" , "/" )
. Replace ( "/" , ":" )
. Trim ( '/' ) ;
using Stream valueStream = new MemoryStream ( kvPair . Value ) ;
using var streamReader = new StreamReader ( valueStream ) ;
var parsedValue = streamReader . ReadToEnd ( ) ;
return new Dictionary < string , string > ( )
{
{ normalizedKey , parsedValue }
} ;
} ;
} ) ;
ATTENTION: En personnalisant cette stratégie ConvertConsulKVPairToConfig, vous contournez toute invocation automatique de l'Parserconfiguré etKeyToRemoveafin qu'il devienne votre responsabilité de les utiliser au besoin par votre scénario.