Adiciona suporte para configurar aplicativos .NET Core usando cônsul. Funciona muito bem com o Git2Consul.
ConvertConsulKVPairToConfig Adicione Winton.Extensions.Configuration.Consul às dependências do seu projeto, através do gerenciador de pacotes do Nuget ou como uma PackageReference no arquivo CSPROJ.
A biblioteca fornece um método de extensão chamado AddConsul for IConfigurationBuilder da mesma maneira que outros provedores de configuração fazem. O IConfigurationBuilder é geralmente configurado na classe Program ou Startup para um aplicativo ASP.NET Core. Consulte a documentação da Microsoft para obter mais informações sobre IConfigurationBuilder .
Um exemplo mínimo é mostrado abaixo:
builder
. AddConsul ( $ " { env . ApplicationName } / { env . EnvironmentName } " ) ; Supondo que o aplicativo esteja em execução no ambiente de 'desenvolvimento' e o nome do aplicativo seja 'site', isso carregará um objeto de configuração JSON no Website/Development no cônsul.
AddConsul tem uma sobrecarga com um terceiro parâmetro adicional do tipo Action<IConsulConfigurationSource> , que permite que as opções descritas abaixo sejam definidas.
ConsulConfigurationOptions
Uma Action<ConsulClientConfiguration> que pode ser usada para configurar o cliente cônsul subjacente.
ConsulHttpClientHandlerOptions
Uma Action<HttpClientHandler> que pode ser usada para configurar as opções de manipulador HTTP do cliente cônsul subjacente.
ConsulHttpClientOptions
Uma Action<HttpClient> que pode ser usada para configurar as opções HTTP do cliente cônsul subjacente.
KeyToRemove
A parte da tecla Consul para remover das teclas de configuração. Por padrão, quando a configuração é analisada, as teclas são criadas removendo a tecla raiz no cônsul onde a configuração está localizada. Isso padrão é a Key .
OnLoadException
Uma Action<ConsulLoadExceptionContext> que pode ser usada para configurar como as exceções jogadas durante a primeira carga devem ser tratadas.
OnWatchException
Um Func<ConsulWatchExceptionContext, TimeSpan> que pode ser usado para configurar como as exceções jogadas ao observar as alterações devem ser tratadas. O TimeSpan que é retornado é usado para definir um atraso antes de tentar novamente. O ConsulWatchExceptionContext fornece dados que podem ser usados para implementar uma estratégia de back-off ou cancelar a observação.
Optional
Um bool que indica se a configuração é opcional. Se false , ele jogará durante a primeira carga se a configuração estiver ausente para a chave fornecida. Padrões para false .
Parser
O analisador para usar, que deve corresponder ao formato da configuração armazenada no cônsul. Padrões para JsonConfigurationParser . Use aqueles em Winton.Extensions.Configuration.Consul.Parsers ou crie o seu próprio implementando IConfigurationParser .
PollWaitTime
A quantidade de tempo em que o cliente deve aguardar antes de chegar ao tempo para fazer pesquisas para alterações. Se isso for definido muito baixo, pode levar a solicitações excessivas que estão sendo emitidas para o cônsul. Observe que essa configuração não afeta a rapidez com que as atualizações se propagam, porque quando um valor altera a consulta de pesquisa longa retorna imediatamente. É melhor pensar nisso como a frequência com que emite que emite chama o loop de pesquisa longa no caso em que não há alterações. Padrão para 5 minutos.
ReloadOnChange
Um bool indicando se deve recarregar a configuração quando ela muda no cônsul. Se true ele assistirá à tecla configurada para alterações. Quando ocorrer uma alteração, a configuração será recarregada de forma assíncrona e o IChangeToken será acionado para sinalizar que a configuração foi recarregada. Padrões para false .
ConvertConsulKVPairToConfig
Um Func<KVPair, IEnumerable<KeyValuePair<string, string>>> que fornece controle completo sobre a análise de chaves consul totalmente qualificadas e valores de cônsul bruto; A implementação padrão será:
Parser configurado para analisar os valores do cônsulKeyToRemove configurado das teclas de cônsul Ao definir esse membro, no entanto, você ignora a chave padrão e o processamento de valor e Parser e KeyToRemove não têm efeito, a menos que sua função ConvertConsulKVPairToConfig os use.
Por padrão, esse provedor de configuração carregará todos os pares de valor-chave do cônsul sob a tecla raiz especificada, mas, por padrão, assume que os valores das teclas da folha são codificados como JSON.
Veja o seguinte exemplo de uma instância específica da loja do Consul KV:
- myApp/
- auth/
{
"appId": "guid",
"claims": [
"email",
"name"
]
}
- logging/
{
"level": "warn"
}
Nesse caso, poderíamos adicionar cônsul como uma fonte de configuração como assim:
var configuration = builder
. AddConsul ( "myApp" , cancellationToken )
. Build ( ) ; A configuração resultante conteria seções para auth e logging . Como um exemplo concreto configuration.GetValue<string>("logging:level") retornaria "warn" e configuration.GetValue<string>("auth:claims:0") retornaria "email" .
Às vezes, no entanto, a configuração no cônsul é armazenada como um conjunto de teclas expandidas. Por exemplo, ferramentas como configuração de carga consul-cli neste formato.
A configuração neste caso pode ser considerada como uma árvore sob uma chave raiz específica no cônsul. Por exemplo, continuando com o exemplo acima, a configuração seria armazenada como:
- myApp/
- auth/
- appId/
"guid"
- claims/
0/
"email"
1/
"name"
- logging/
- level/
"warn"
Conforme descrito acima deste provedor de configuração, lida com chaves recursivas por padrão. A única diferença aqui é que os valores não são mais codificados como JSON. Portanto, para carregar esta configuração, o analisador deve ser alterado. Isso pode ser feito assim ao adicionar o provedor de configuração:
builder
. AddConsul (
"myApp" ,
options =>
{
options . Parser = new SimpleConfigurationParser ( ) ;
} ) ; O SimpleConfigurationParser espera encontrar um valor escalar em cada chave da folha na árvore.
Se você precisar suportar as teclas expandidas e os valores JSON, isso poderá ser alcançado colocando -os sob diferentes teclas da raiz e adicionando várias fontes de configuração. Por exemplo:
builder
. AddConsul (
"myApp/expandedKeys" ,
options =>
{
options . Parser = new SimpleConfigurationParser ( ) ;
} )
. AddConsul ( "myApp/jsonValues" , cancellationToken ) ;ConvertConsulKVPairToConfig Às vezes, você pode precisar de mais controle sobre a conversão de pares de consul KV em dados IConfiguration . Nesse caso, você pode definir uma função ConvertConsulKVPairToConfig personalizada:
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 }
} ;
} ;
} ) ;
CUIDADO: Ao personalizar essa estratégia ConvertConsulKVPairToConfig, você ignora qualquer invocação automática doParsereKeyToRemoveconfigurado, para que se torne sua responsabilidade usá -los conforme necessário.