Fügt Unterstützung für die Konfiguration von .NET -Core -Anwendungen mit Consul hinzu. Funktioniert hervorragend mit Git2Consul.
ConvertConsulKVPairToConfig -Strategie Fügen Sie die Abhängigkeiten Ihres Projekts Ihres Projekts, entweder über den Nuget -Paket -Manager oder als PackageReference in der CSPROJ -Datei hinzu, Winton.Extensions.Configuration.Consul
Die Bibliothek bietet eine Erweiterungsmethode namens AddConsul für IConfigurationBuilder genauso wie andere Konfigurationsanbieter. Der IConfigurationBuilder ist normalerweise entweder im Program oder Startup für eine ASP.NET -Kernanwendung konfiguriert. Weitere Informationen zu IConfigurationBuilder finden Sie unter der Dokumentation von Microsoft.
Im Folgenden ist ein minimales Beispiel gezeigt:
builder
. AddConsul ( $ " { env . ApplicationName } / { env . EnvironmentName } " ) ; Unter der Annahme, dass die Anwendung in der "Entwicklungsumgebung" ausgeführt wird und der Anwendungsname "Website" ist, wird ein JSON -Konfigurationsobjekt von der Website/Development in Consul geladen.
AddConsul hat eine Überlast mit einem zusätzlichen dritten Parameter der Typ Action<IConsulConfigurationSource> , mit der die unten beschriebenen Optionen festgelegt werden können.
ConsulConfigurationOptions
Eine Action<ConsulClientConfiguration> , mit der der zugrunde liegende Konsul -Client konfiguriert werden kann.
ConsulHttpClientHandlerOptions
Eine Action<HttpClientHandler> , mit der die HTTP -Handler -Optionen des zugrunde liegenden Konsul -Clients konfiguriert werden können.
ConsulHttpClientOptions
Eine Action<HttpClient> , mit der die HTTP -Optionen des zugrunde liegenden Konsul -Clients konfiguriert werden können.
KeyToRemove
Der Teil der Konsulschlüssel, um aus den Konfigurationsschlüssel zu entfernen. Wenn die Konfiguration analysiert wird, werden die Tasten standardmäßig durch Entfernen des Stammschlüssels in Consul erstellt, in dem sich die Konfiguration befindet. Dies ist standardmäßig zu Key .
OnLoadException
Eine Action<ConsulLoadExceptionContext> , mit der konfiguriert werden kann, wie Ausnahmen während der ersten Last behandelt werden sollten.
OnWatchException
Ein Func<ConsulWatchExceptionContext, TimeSpan> , mit dem konfiguriert werden kann, wie Ausnahmen beim Beobachten von Änderungen behandelt werden sollten. Die zurückgegebene TimeSpan wird verwendet, um vor dem Wiederieren eine Verzögerung festzulegen. Der ConsulWatchExceptionContext enthält Daten, mit denen eine Back-Off-Strategie implementiert oder das Beobachten insgesamt abgesagt werden kann.
Optional
Ein bool , der angibt, ob die Konfiguration optional ist. Wenn dies false , wird es während der ersten Last werfen, wenn die Konfiguration für den angegebenen Schlüssel fehlt. Standardmäßig false .
Parser
Der zu verwendende Parser, der mit dem Format der in Consul gespeicherten Konfiguration übereinstimmt. Standardeinstellungen zu JsonConfigurationParser . Verwenden Sie entweder diejenigen unter Winton.Extensions.Configuration.Consul.Parsers oder erstellen Sie Ihre eigene, indem Sie IConfigurationParser implementieren.
PollWaitTime
Die Zeit, die der Kunde warten sollte, bevor sie bei der Wahl der Änderungen zeitlich abzielen. Wenn dies zu niedrig ist, kann dies dazu führen, dass übermäßige Anfragen an Consul ausgestellt werden. Beachten Sie, dass diese Einstellung keinen Einfluss darauf hat, wie sich schnell aktualisiert wird, da bei einem Wert die lange Umfragemangehörigkeit sofort zurückgibt. Es ist besser, dies als die Häufigkeit zu betrachten, mit der es in der langen Wahlschleife aufgerufen wird, wenn es keine Änderung gibt. Standardeinstellung auf 5 Minuten.
ReloadOnChange
Ein bool , das angibt, ob die Konfiguration nach dem Veränderung des Konsuls neu geladen werden soll. Wenn true wird der konfigurierte Schlüssel für Änderungen beobachtet. Wenn eine Änderung auftritt, wird die Konfiguration asynchron neu geladen und das IChangeToken wird ausgelöst, um zu signalisieren, dass die Konfiguration neu geladen wurde. Standardmäßig false .
ConvertConsulKVPairToConfig
Ein Func<KVPair, IEnumerable<KeyValuePair<string, string>>> , der Ihnen die vollständige Kontrolle über die Analyse vollständig qualifizierter Konsulschlüssel und Rohkonsulwerte gibt. Die Standardimplementierung wird:
Parser , um Konsulwerte zu analysierenKeyToRemove -Präfix aus Konsulschlüssel Bei der Festlegung dieses Mitglieds umgehen Sie jedoch den Standardschlüssel und die Wertschöpfung sowie Parser und KeyToRemove keinen Einfluss, es sei denn, Ihre Funktion ConvertConsulKVPairToConfig verwendet sie.
Standardmäßig lädt dieser Konfigurationsanbieter alle Schlüsselwertepaare vom Konsul unter den angegebenen Stammschlüssel. Standardmäßig wird jedoch angenommen, dass die Werte der Blattschlüssel als JSON codiert werden.
Nehmen Sie das folgende Beispiel für eine bestimmte Instanz des Konsul -KV -Stores:
- myApp/
- auth/
{
"appId": "guid",
"claims": [
"email",
"name"
]
}
- logging/
{
"level": "warn"
}
In diesem Fall könnten wir Konsul als Konfigurationsquelle wie SO hinzufügen:
var configuration = builder
. AddConsul ( "myApp" , cancellationToken )
. Build ( ) ; Die resultierende Konfiguration würde Abschnitte für auth und logging enthalten. "warn" configuration.GetValue<string>("auth:claims:0") "email" configuration.GetValue<string>("logging:level")
Manchmal wird die Konfiguration in Consul jedoch als eine Reihe erweiterter Schlüssel gespeichert. Zum Beispiel Tools wie consul-cli -Lastkonfiguration in diesem Format.
Die Konfiguration kann in diesem Fall als Baum unter einem bestimmten Wurzelschlüssel in Consul betrachtet werden. Wenn Sie beispielsweise das obige Beispiel fortsetzen, wird die Konfiguration als:
- myApp/
- auth/
- appId/
"guid"
- claims/
0/
"email"
1/
"name"
- logging/
- level/
"warn"
Wie oben beschrieben, befasst sich dieser Konfigurationsanbieter standardmäßig mit rekursiven Schlüssel. Der einzige Unterschied besteht darin, dass die Werte nicht mehr als JSON kodiert werden. Um diese Konfiguration zu laden, muss der Parser geändert werden. Dies kann so erfolgen, wenn der Konfigurationsanbieter hinzugefügt wird:
builder
. AddConsul (
"myApp" ,
options =>
{
options . Parser = new SimpleConfigurationParser ( ) ;
} ) ; Der SimpleConfigurationParser erwartet, dass er bei jedem Blattschlüssel im Baum auf einen skalaren Wert begegnet wird.
Wenn Sie sowohl erweiterte Schlüsseln als auch JSON -Werte unterstützen müssen, kann dies erreicht werden, indem sie unter verschiedene Root -Tasten gelegt und mehrere Konfigurationsquellen hinzugefügt werden. Zum Beispiel:
builder
. AddConsul (
"myApp/expandedKeys" ,
options =>
{
options . Parser = new SimpleConfigurationParser ( ) ;
} )
. AddConsul ( "myApp/jsonValues" , cancellationToken ) ;ConvertConsulKVPairToConfig -Strategie Manchmal benötigen Sie möglicherweise mehr Kontrolle über die Umwandlung von Rohkonsul -KV -Paaren in IConfiguration . In diesem Fall können Sie eine benutzerdefinierte ConvertConsulKVPairToConfig -Funktion festlegen:
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 }
} ;
} ;
} ) ;
Achtung: Indem Sie diese ConvertConsulKVPairToConfig-Strategie anpassen, umgehen Sie eine automatische Aufruf des konfiguriertenParserundKeyToRemove, damit es in Ihrer Verantwortung ist, sie bei Bedarf durch Ihr Szenario zu verwenden.