Bagikan melalui


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 mereferensikan proyek katalog dan proyek kerak . Dua panggilan WithReference menginstruksikan proyek .NET.NET Aspire untuk meneruskan informasi penemuan layanan untuk proyek yang dirujuk (katalogdan keranjang ) ke dalam 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 adalah 10.2.3.4:8080.
  • Titik akhir "dasbor", diakses melalui https://_dashboard.basket adalah 10.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