penemuan layanan .NET.NET Aspire
Dalam artikel ini, Anda mempelajari cara kerja penemuan layanan dalam proyek .NET.NET Aspire. .NET .NET Aspire mencakup fungsionalitas untuk mengonfigurasi penemuan layanan pada waktu pengembangan dan pengujian. Fungsionalitas penemuan layanan berfungsi dengan menyediakan konfigurasi dalam format yang diharapkan oleh penyelesai titik akhir berbasis konfigurasi dari proyek appHost .NET.NET Aspire ke proyek layanan individual yang ditambahkan ke model aplikasi. Untuk informasi selengkapnya, lihat penemuan layanan di .NET.
Penemuan layanan implisit berdasarkan referensi
Konfigurasi untuk penemuan layanan hanya ditambahkan untuk layanan yang dirujuk oleh proyek tertentu. Misalnya, pertimbangkan program AppHost berikut:
var builder = DistributedApplication.CreateBuilder(args);
var catalog = builder.AddProject<Projects.CatalogService>("catalog");
var basket = builder.AddProject<Projects.BasketService>("basket");
var frontend = builder.AddProject<Projects.MyFrontend>("frontend")
.WithReference(basket)
.WithReference(catalog);
Dalam contoh sebelumnya, proyek frontend
Titik Akhir yang Dinamai
Beberapa layanan mengekspos beberapa titik akhir bernama. Titik akhir bernama dapat diselesaikan dengan menentukan nama titik akhir di bagian host URI permintaan HTTP, mengikuti format scheme://_endpointName.serviceName
. Misalnya, jika layanan bernama "basket" mengekspos endpoint bernama "dashboard", maka URI https+http://_dashboard.basket
dapat digunakan untuk menentukan endpoint ini, misalnya:
builder.Services.AddHttpClient<BasketServiceClient>(
static client => client.BaseAddress = new("https+http://basket"));
builder.Services.AddHttpClient<BasketServiceDashboardClient>(
static client => client.BaseAddress = new("https+http://_dashboard.basket"));
Dalam contoh sebelumnya, dua kelas HttpClient ditambahkan, satu untuk layanan keranjang inti dan satu untuk dasbor layanan keranjang.
Titik akhir bernama menggunakan konfigurasi
Dengan pemecah masalah titik akhir berbasis konfigurasi, titik akhir bernama dapat ditentukan dalam konfigurasi dengan awalan nilai titik akhir dengan _endpointName.
, di mana endpointName
adalah nama titik akhir. Misalnya, pertimbangkan konfigurasi appsettings.json ini yang menentukan titik akhir default (tanpa nama) dan titik akhir bernama "dasbor":
{
"Services": {
"basket":
"https": "https://10.2.3.4:8080", /* the https endpoint, requested via https://basket */
"dashboard": "https://10.2.3.4:9999" /* the "dashboard" endpoint, requested via https://_dashboard.basket */
}
}
}
Pada JSONsebelumnya:
- Titik akhir default, ketika
https://basket
diselesaikan adalah10.2.3.4:8080
. - Titik akhir "dasbor", diakses melalui
https://_dashboard.basket
adalah10.2.3.4:9999
.
Titik akhir bernama di .NET.NET Aspire
var basket = builder.AddProject<Projects.BasketService>("basket")
.WithHttpsEndpoint(hostPort: 9999, name: "dashboard");
Titik akhir yang diberi nama di Kubernetes menggunakan catatan layanan DNS (DNS SRV)
Saat menyebarkan ke Kubernetes, penyelesai titik akhir layanan DNS SRV dapat digunakan untuk menyelesaikan endpoint bernama. Misalnya, definisi sumber daya berikut akan menghasilkan rekaman DNS SRV dibuat untuk titik akhir bernama "default" dan titik akhir bernama "dasbor", keduanya pada layanan bernama "basket".
apiVersion: v1
kind: Service
metadata:
name: basket
spec:
selector:
name: basket-service
clusterIP: None
ports:
- name: default
port: 8080
- name: dashboard
port: 9999
Untuk mengonfigurasi layanan agar dapat menyelesaikan titik akhir "dasbor" pada layanan "keranjang", tambahkan resolver titik akhir layanan DNS SRV ke penyusun host dengan cara berikut:
builder.Services.AddServiceDiscoveryCore();
builder.Services.AddDnsSrvServiceEndpointProvider();
Untuk informasi selengkapnya, lihat AddServiceDiscoveryCore dan AddDnsSrvServiceEndpointProvider.
Nama port khusus "default" digunakan untuk menentukan titik akhir default, diselesaikan menggunakan URI https://basket
.
Seperti dalam contoh sebelumnya, tambahkan penemuan layanan ke HttpClient
untuk layanan ke basket:
builder.Services.AddHttpClient<BasketServiceClient>(
static client => client.BaseAddress = new("https://basket"));
Demikian pula, titik akhir "dasbor" dapat ditargetkan sebagai berikut:
builder.Services.AddHttpClient<BasketServiceDashboardClient>(
static client => client.BaseAddress = new("https://_dashboard.basket"));
Lihat juga
- Penemuan Layanan di .NET
- Membuat permintaan HTTP dengan kelas HttpClient
- IHttpClientFactory dengan .NET
.NET Aspire