Menambahkan dukungan untuk mengkonfigurasi aplikasi inti .NET menggunakan konsul. Bekerja sangat baik dengan git2consul.
ConvertConsulKVPairToConfig Tambahkan Winton.Extensions.Configuration.Consul ke dependensi proyek Anda, baik melalui Nuget Package Manager atau sebagai PackageReference dalam file csproj.
Perpustakaan menyediakan metode ekstensi yang disebut AddConsul untuk IConfigurationBuilder dengan cara yang sama seperti yang dilakukan penyedia konfigurasi lainnya. IConfigurationBuilder biasanya dikonfigurasi di Program atau kelas Startup untuk aplikasi inti ASP.NET. Lihat dokumentasi Microsoft untuk informasi lebih lanjut tentang IConfigurationBuilder .
Contoh minimal ditunjukkan di bawah ini:
builder
. AddConsul ( $ " { env . ApplicationName } / { env . EnvironmentName } " ) ; Dengan asumsi aplikasi berjalan di lingkungan 'pengembangan' dan nama aplikasi adalah 'situs web', maka ini akan memuat objek konfigurasi JSON dari Website/Development di konsul.
AddConsul memiliki kelebihan beban dengan parameter ketiga tambahan dari Type Action<IConsulConfigurationSource> yang memungkinkan opsi yang diuraikan di bawah ini diatur.
ConsulConfigurationOptions
Action<ConsulClientConfiguration> yang dapat digunakan untuk mengonfigurasi klien konsul yang mendasarinya.
ConsulHttpClientHandlerOptions
Action<HttpClientHandler> yang dapat digunakan untuk mengonfigurasi opsi handler HTTP klien konsul yang mendasarinya.
ConsulHttpClientOptions
Action<HttpClient> yang dapat digunakan untuk mengonfigurasi opsi HTTP klien Konsul yang mendasarinya.
KeyToRemove
Bagian dari kunci konsul untuk menghapus dari tombol konfigurasi. Secara default, ketika konfigurasi diuraikan, tombol dibuat dengan menghapus kunci root di konsul di mana konfigurasi berada. Ini default ke Key .
OnLoadException
Action<ConsulLoadExceptionContext> yang dapat digunakan untuk mengonfigurasi bagaimana pengecualian yang dilemparkan selama beban pertama harus ditangani.
OnWatchException
Func<ConsulWatchExceptionContext, TimeSpan> yang dapat digunakan untuk mengkonfigurasi bagaimana pengecualian dilemparkan saat menonton perubahan harus ditangani. TimeSpan yang dikembalikan digunakan untuk menetapkan penundaan sebelum mencoba lagi. ConsulWatchExceptionContext menyediakan data yang dapat digunakan untuk mengimplementasikan strategi back-off atau untuk membatalkan menonton sama sekali.
Optional
bool yang menunjukkan apakah konfigurasi opsional. Jika false maka itu akan melempar selama beban pertama jika konfigurasi hilang untuk kunci yang diberikan. Default ke false .
Parser
Parser untuk digunakan, yang harus cocok dengan format konfigurasi yang disimpan di konsul. Default ke JsonConfigurationParser . Baik menggunakan mereka di bawah Winton.Extensions.Configuration.Consul.Parsers atau buat sendiri dengan mengimplementasikan IConfigurationParser .
PollWaitTime
Jumlah waktu klien harus menunggu sebelum waktu keluar saat polling untuk perubahan. Jika ini ditetapkan terlalu rendah, itu dapat menyebabkan permintaan berlebihan dikeluarkan untuk konsul. Catatan Pengaturan ini tidak mempengaruhi seberapa cepat memperbarui menyebarkan, karena ketika suatu nilai mengubah permintaan pemungutan suara yang panjang segera kembali. Lebih baik menganggap ini sebagai frekuensi yang mengeluarkan panggilan dalam loop pemungutan suara panjang dalam kasus di mana tidak ada perubahan. Default hingga 5 menit.
ReloadOnChange
bool yang menunjukkan apakah akan memuat ulang konfigurasi saat berubah di konsul. Jika true itu akan menonton kunci yang dikonfigurasi untuk perubahan. Ketika perubahan terjadi, konfigurasi akan dimuat ulang secara tidak sinkron dan IChangeToken akan dipicu untuk memberi sinyal bahwa konfigurasi telah dimuat ulang. Default ke false .
ConvertConsulKVPairToConfig
Func<KVPair, IEnumerable<KeyValuePair<string, string>>> yang memberi Anda kontrol penuh atas penguraian tombol konsul yang memenuhi syarat dan nilai konsul mentah; Implementasi default akan:
Parser yang dikonfigurasi untuk parseKeyToRemove yang dikonfigurasi dari Konsul Keys Saat mengatur anggota ini, Anda mem -bypass kunci default dan pemrosesan nilai dan Parser dan KeyToRemove tidak berpengaruh kecuali fungsi ConvertConsulKVPairToConfig Anda menggunakannya.
Secara default penyedia konfigurasi ini akan memuat semua pasangan nilai kunci dari konsul di bawah kunci root yang ditentukan, tetapi secara default mengasumsikan bahwa nilai tombol daun dikodekan sebagai JSON.
Ambil contoh berikut dari contoh tertentu dari Consul KV Store:
- myApp/
- auth/
{
"appId": "guid",
"claims": [
"email",
"name"
]
}
- logging/
{
"level": "warn"
}
Dalam hal ini kita dapat menambahkan konsul sebagai sumber konfigurasi seperti itu:
var configuration = builder
. AddConsul ( "myApp" , cancellationToken )
. Build ( ) ; Konfigurasi yang dihasilkan akan berisi bagian untuk auth dan logging . Sebagai contoh configuration.GetValue<string>("logging:level") akan mengembalikan "warn" dan configuration.GetValue<string>("auth:claims:0") akan mengembalikan "email" .
Namun terkadang, konfigurasi di konsul disimpan sebagai satu set kunci yang diperluas. Misalnya, alat seperti konfigurasi pemuatan consul-cli dalam format ini.
Konfigurasi dalam kasus ini dapat dianggap sebagai pohon di bawah kunci akar tertentu di konsul. Misalnya, melanjutkan dengan contoh di atas, konfigurasi akan disimpan sebagai:
- myApp/
- auth/
- appId/
"guid"
- claims/
0/
"email"
1/
"name"
- logging/
- level/
"warn"
Sebagaimana diuraikan di atas penyedia konfigurasi ini berurusan dengan kunci rekursif secara default. Satu -satunya perbedaan di sini adalah bahwa nilainya tidak lagi dikodekan sebagai JSON. Oleh karena itu, untuk memuat konfigurasi ini, parser harus diubah. Ini dapat dilakukan seperti itu saat menambahkan penyedia konfigurasi:
builder
. AddConsul (
"myApp" ,
options =>
{
options . Parser = new SimpleConfigurationParser ( ) ;
} ) ; SimpleConfigurationParser mengharapkan untuk menghadapi nilai skalar pada setiap kunci daun di pohon.
Jika Anda perlu mendukung nilai kunci yang diperluas dan JSON maka ini dapat dicapai dengan menempatkannya di bawah tombol root yang berbeda dan menambahkan beberapa sumber konfigurasi. Misalnya:
builder
. AddConsul (
"myApp/expandedKeys" ,
options =>
{
options . Parser = new SimpleConfigurationParser ( ) ;
} )
. AddConsul ( "myApp/jsonValues" , cancellationToken ) ;ConvertConsulKVPairToConfig Kadang -kadang Anda mungkin memerlukan kontrol lebih besar atas konversi pasangan KV konsul mentah menjadi data IConfiguration . Dalam hal ini Anda dapat mengatur fungsi ConvertConsulKVPairToConfig khusus:
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 }
} ;
} ;
} ) ;
PERHATIAN: Dengan menyesuaikan strategi ConvertConsulKVPairToConfigini Anda mem -bypass doa otomatis dariParserdanKeyToRemoveyang dikonfigurasi sehingga menjadi tanggung jawab Anda untuk menggunakannya sesuai kebutuhan oleh skenario Anda.