Consulを使用して.NETコアアプリケーションの構成のサポートを追加します。 git2consulでうまく機能します。
ConvertConsulKVPairToConfig戦略のカスタマイズWinton.Extensions.Configuration.Consulをプロジェクトの依存関係に追加するか、nugetパッケージマネージャーを介して、またはcsprojファイルのPackageReferenceに加えます。
ライブラリは、他の構成プロバイダーと同じ方法で、 IConfigurationBuilder用のAddConsulと呼ばれる拡張メソッドを提供します。 IConfigurationBuilderは通常、ASP.NETコアアプリケーションのProgramまたはStartupクラスのいずれかで構成されています。 IConfigurationBuilderの詳細については、Microsoftのドキュメントを参照してください。
最小限の例を以下に示します。
builder
. AddConsul ( $ " { env . ApplicationName } / { env . EnvironmentName } " ) ;アプリケーションが「開発」環境で実行されており、アプリケーション名が「Webサイト」であると仮定すると、ConsulのWebsite/DevelopmentキーからJSON構成オブジェクトがロードされます。
AddConsul 、以下に概説するオプションを設定できるようにするタイプAction<IConsulConfigurationSource>の追加の3番目のパラメーターを備えたオーバーロードがあります。
ConsulConfigurationOptions
基礎となるConsulクライアントの構成に使用できるAction<ConsulClientConfiguration> 。
ConsulHttpClientHandlerOptions
基礎となるConsulクライアントのHTTPハンドラーオプションを構成するために使用できるAction<HttpClientHandler> 。
ConsulHttpClientOptions
基礎となるConsulクライアントのHTTPオプションを構成するために使用できるAction<HttpClient> 。
KeyToRemove
構成キーから削除するConsulキーの部分。デフォルトでは、構成が解析された場合、キーは、構成が配置されている場所の領事のルートキーを削除することにより作成されます。これはデフォルトで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
Consulで変更されたときに構成をリロードするかどうかを示すbool 。 trueなら、それは変更のために構成されたキーを監視します。変更が発生すると、構成が非同期的にリロードされ、 IChangeTokenトリガーされ、構成がリロードされていることを示すようにトリガーされます。デフォルトはfalseになります。
ConvertConsulKVPairToConfig
Func<KVPair, IEnumerable<KeyValuePair<string, string>>>これにより、完全に適格な領事キーと生の領事値の解析を完全に制御できます。デフォルトの実装は次のとおりです。
Parserを使用して、領事値を解析しますKeyToRemoveプレフィックスを削除しますただし、このメンバーを設定する場合、デフォルトのキーと値処理とParserとKeyToRemoveをバイパスしないと、 ConvertConsulKVPairToConfig関数がそれらを使用しない限り効果はありません。
デフォルトでは、この構成プロバイダーは、指定されたルートキーの下にあるConsulからすべてのキー価値ペアをロードしますが、デフォルトでは、リーフキーの値がJSONとしてエンコードされていると想定しています。
Consul KVストアの特定のインスタンスの次の例を考えてみましょう。
- myApp/
- auth/
{
"appId": "guid",
"claims": [
"email",
"name"
]
}
- logging/
{
"level": "warn"
}
この例では、次のような構成ソースとしてConsulを追加できます。
var configuration = builder
. AddConsul ( "myApp" , cancellationToken )
. Build ( ) ;結果の構成には、 authとloggingセクションが含まれます。具体的な例configuration.GetValue<string>("logging:level")は"warn"とconfiguration.GetValue<string>("auth:claims:0") "email"返します。
ただし、Consul in Consulが拡張キーのセットとして保存される場合があります。たとえば、この形式の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 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の自動呼び出しをバイパスして、シナリオで必要に応じて使用する責任になります。