Добавляет поддержку для настройки приложений .NET Core с использованием консула. Отлично работает с GIT2Consul.
ConvertConsulKVPairToConfig Добавьте Winton.Extensions.Configuration.Consul в зависимости вашего проекта, либо через диспетчер пакетов Nuget, либо в качестве PackageReference в файле CSProj.
Библиотека предоставляет метод расширения, называемый AddConsul для IConfigurationBuilder так же, как и другие поставщики конфигурации. IConfigurationBuilder обычно настроен либо в Program , либо в классе Startup для основного приложения ASP.NET. См. Документацию Microsoft для получения дополнительной информации о IConfigurationBuilder .
Минимальный пример показан ниже:
builder
. AddConsul ( $ " { env . ApplicationName } / { env . EnvironmentName } " ) ; Предполагая, что приложение работает в среде «разработка», а имя приложения - «веб -сайт», то это загрузит объект конфигурации JSON с ключа Website/Development в консул.
AddConsul имеет перегрузку с дополнительным третьим параметром типа Action<IConsulConfigurationSource> , который позволяет установить параметры, изложенные ниже.
ConsulConfigurationOptions
Action<ConsulClientConfiguration> , которое можно использовать для настройки базового клиента консула.
ConsulHttpClientHandlerOptions
Action<HttpClientHandler> , которое можно использовать для настройки вариантов обработчика HTTP -обработчика базового клиента.
ConsulHttpClientOptions
Action<HttpClient> , которое можно использовать для настройки вариантов HTTP базового консула.
KeyToRemove
Часть ключа консула для удаления из ключей конфигурации. По умолчанию, когда конфигурация анализируется, клавиши создаются путем удаления корневой клавиши в консул, где находится конфигурация. Это по умолчанию к Key .
OnLoadException
Action<ConsulLoadExceptionContext> , которое можно использовать для настройки того, как следует обрабатывать исключения, выдвинутые во время первой нагрузки.
OnWatchException
Func<ConsulWatchExceptionContext, TimeSpan> , который можно использовать для настройки того, как следует обрабатывать исключения при просмотре изменений. Возвращенный TimeSpan используется для установления задержки перед повторением. ConsulWatchExceptionContext предоставляет данные, которые можно использовать для реализации стратегии отступления или для вообще отмены просмотра.
Optional
bool , которая указывает, является ли конфигурация необязательной. Если false , то он бросится во время первой нагрузки, если конфигурация отсутствует для данного ключа. По умолчанию false .
Parser
Использующий анализатор, который должен соответствовать формату конфигурации, хранящейся в консул. По умолчанию в JsonConfigurationParser . Используйте тех, кто находится под Winton.Extensions.Configuration.Consul.Parsers , либо создайте свой собственный, внедрив IConfigurationParser .
PollWaitTime
Количество времени, которое клиент должен ждать, прежде чем выходить на работу при опросе изменений. Если это установлено слишком низким, это может привести к выдаче чрезмерных запросов консулу. Обратите внимание, что этот параметр не влияет на то, как быстро распространяются обновления, потому что, когда значение изменяет длительный опрос запрос, возвращается немедленно. Лучше думать об этом как о частоте, с которой она вызывает вызовы в длинном цикле опроса в случае, когда нет изменений. По умолчанию до 5 минут.
ReloadOnChange
bool указывающая, можно ли перезагрузить конфигурацию при изменении консула. Если это true он будет смотреть настройку ключа для изменений. Когда произойдет изменение, конфигурация будет асинхронно перезагружена, а IChangeToken будет запускаться, чтобы сигнализировать о том, что конфигурация была перезагружена. По умолчанию false .
ConvertConsulKVPairToConfig
Func<KVPair, IEnumerable<KeyValuePair<string, string>>> , который дает вам полный контроль над анализом полностью квалифицированных ключей консул и значения необработанного консула; реализация по умолчанию будет:
Parser для анализа значений консулаKeyToRemove из ключей консула Однако при настройке этого элемента вы обходите ключ по умолчанию и обработку значений, а также Parser и KeyToRemove не оказывают никакого эффекта, если ваша функция ConvertConsulKVPairToConfig их не использует.
По умолчанию этот поставщик конфигурации загрузит все пары клавиш из консула в соответствии с указанным корневым ключом, но по умолчанию предполагает, что значения ключей листьев кодируются как JSON.
Возьмите следующий пример конкретного случая магазина Consul KV:
- myApp/
- auth/
{
"appId": "guid",
"claims": [
"email",
"name"
]
}
- logging/
{
"level": "warn"
}
В этом случае мы могли бы добавить консул в качестве источника конфигурации, как SO:
var configuration = builder
. AddConsul ( "myApp" , cancellationToken )
. Build ( ) ; Результирующая конфигурация будет содержать разделы для auth и logging . В качестве конкретного примера configuration.GetValue<string>("logging:level") будет возвращать "warn" и configuration.GetValue<string>("auth:claims:0") вернет "email" .
Иногда, однако, конфигурация в консул хранится как набор расширенных ключей. Например, такие инструменты, как конфигурация нагрузки consul-cli в этом формате.
Конфигурация в этом случае может рассматриваться как дерево под определенным корневым ключом в консул. Например, продолжение приведенного выше примера, конфигурация будет сохранена как:
- myApp/
- auth/
- appId/
"guid"
- claims/
0/
"email"
1/
"name"
- logging/
- level/
"warn"
Как указано выше этого поставщика конфигурации, по умолчанию касается рекурсивных ключей. Единственное отличие здесь заключается в том, что значения больше не закодированы как JSON. Поэтому, чтобы загрузить эту конфигурацию, следует изменить анализатор. Это можно сделать так, как при добавлении поставщика конфигурации:
builder
. AddConsul (
"myApp" ,
options =>
{
options . Parser = new SimpleConfigurationParser ( ) ;
} ) ; SimpleConfigurationParser рассчитывает столкнуться с скалярным значением в каждом ключке листа в дереве.
Если вам нужно поддерживать как расширенные ключи, так и значения JSON, то это может быть достигнуто, поместив их в разные корневые клавиши и добавив несколько источников конфигурации. Например:
builder
. AddConsul (
"myApp/expandedKeys" ,
options =>
{
options . Parser = new SimpleConfigurationParser ( ) ;
} )
. AddConsul ( "myApp/jsonValues" , cancellationToken ) ;ConvertConsulKVPairToConfig Иногда вам может потребоваться больший контроль над преобразованием RAW CONSUL PARS KV в данные IConfiguration . В этом случае вы можете установить пользовательскую функцию ConvertConsulKVPairToConfig :
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 }
} ;
} ;
} ) ;
Внимание: Настройка этой стратегии ConvertConsulKVPairToConfigвы обходите любой автоматический вызов настроенногоParserиKeyToRemove, чтобы вы стали вашей обязанностью использовать их по мере необходимости в вашем сценарии.