영사를 사용하여 .NET 코어 애플리케이션 구성에 대한 지원이 추가됩니다. Git2Consul과 잘 작동합니다.
ConvertConsulKVPairToConfig 전략 사용자 정의 Winton.Extensions.Configuration.Consul NUGET 패키지 관리자 또는 CSPROJ 파일의 PackageReference 로 프로젝트 종속성에 추가하십시오.
라이브러리는 다른 구성 제공 업체와 같은 방식으로 IConfigurationBuilder 용 AddConsul 이라는 확장 방법을 제공합니다. IConfigurationBuilder 일반적으로 ASP.NET Core 응용 프로그램의 Program 또는 Startup 클래스에서 구성됩니다. IConfigurationBuilder 에 대한 자세한 내용은 Microsoft의 문서를 참조하십시오.
최소 예제는 다음과 같습니다.
builder
. AddConsul ( $ " { env . ApplicationName } / { env . EnvironmentName } " ) ; 응용 프로그램이 '개발'환경에서 실행 중이며 응용 프로그램 이름이 '웹 사이트'라고 가정하면 Website/Development 키에서 JSON 구성 객체를로드합니다.
AddConsul 에는 유형의 추가 세 번째 매개 변수 Action<IConsulConfigurationSource> 의 추가 세 번째 매개 변수가있는 오버로드가있어 아래에 요약 된 옵션을 설정할 수 있습니다.
ConsulConfigurationOptions
기본 영사 클라이언트를 구성하는 데 사용할 수있는 Action<ConsulClientConfiguration> .
ConsulHttpClientHandlerOptions
기본 영사 클라이언트의 HTTP 핸들러 옵션을 구성하는 데 사용할 수있는 Action<HttpClientHandler> .
ConsulHttpClientOptions
기본 영사 클라이언트의 HTTP 옵션을 구성하는 데 사용할 수있는 Action<HttpClient> .
KeyToRemove
구성 키를 제거하기위한 영사 키의 일부. 기본적으로 구성이 구문 분석되면 구성이 위치한 영사의 루트 키를 제거하여 키가 생성됩니다. 이 기본값은 Key 표시됩니다.
OnLoadException
첫 번째 하중 중에 예외가 발생하는 방식을 구성하는 데 사용할 수있는 Action<ConsulLoadExceptionContext> 처리 할 수 있습니다.
OnWatchException
Func<ConsulWatchExceptionContext, TimeSpan> 은 변경 사항을 시청할 때 예외가 발생하는 방식을 구성하는 데 사용할 수있는 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 Store의 특정 인스턴스에 대한 다음 예를 들어보십시오.
- myApp/
- auth/
{
"appId": "guid",
"claims": [
"email",
"name"
]
}
- logging/
{
"level": "warn"
}
이 경우 우리는 위안을 다음과 같은 구성 소스로 추가 할 수 있습니다.
var configuration = builder
. AddConsul ( "myApp" , cancellationToken )
. Build ( ) ; 결과 구성에는 auth 및 logging 섹션이 포함됩니다. 구체적인 예제 configuration.GetValue<string>("logging:level") 은 "warn" 및 configuration.GetValue<string>("auth:claims:0") "email" 반환합니다.
그러나 때로는 영사 구성이 확장 된 키 세트로 저장됩니다. 예를 들어,이 형식의 consul-cli Load 구성과 같은 도구.
이 경우 구성은 영사의 특정 루트 키 아래 트리로 생각할 수 있습니다. 예를 들어, 위의 예제를 계속하면 구성이 다음과 같이 저장됩니다.
- 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 전략 사용자 정의 때로는 원시 영사 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의 자동 호출을 우회하여 시나리오에서 필요에 따라 사용하는 것이 귀하의 책임이됩니다.