Aracılığıyla paylaş


.NET .NET Aspire hizmet keşfi

Bu makalede, hizmet bulmanın bir .NET.NET Aspire projesinde nasıl çalıştığını öğreneceksiniz. .NET .NET Aspire, geliştirme ve test zamanında hizmet bulmayı yapılandırma işlevselliğini içerir. Hizmet bulma işlevselliği, AppHost projesinden uygulama modeline eklenen tek tek hizmet projelerine yapılandırma tabanlı uç nokta çözümleyicisi tarafından beklenen biçimde yapılandırma sağlayarak çalışır. Daha fazla bilgi için bkz. Hizmet keşfi .NET.

Referansla örtük hizmet keşfi

Hizmet bulma yapılandırması yalnızca belirli bir proje tarafından başvurulan hizmetler için eklenir. Örneğin, aşağıdaki AppHost programını göz önünde bulundurun:

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);

Yukarıdaki örnekte, ön uç projesi, katalog projesine ve sepet projesine başvurur. İki WithReference çağrısı, atıfta bulunulan projeler (.NETve .NET Aspire) için hizmet bulma bilgilerini ön yüz projesine iletmesi için projesini yönlendirir.

Adlandırılmış uç noktalar

Bazı hizmetler birden çok adlandırılmış uç noktayı kullanıma sunar. Adlandırılmış uç noktalar, HTTP isteği URI'sinin ana bilgisayar bölümünde uç nokta adı belirtilerek scheme://_endpointName.serviceNamebiçiminde çözümlenebilir. Örneğin, "sepet" adlı bir hizmet "pano" adlı bir uç noktayı kullanıma sunarsa, URI https+http://_dashboard.basket bu uç noktayı belirtmek için kullanılabilir, örneğin:

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"));

Yukarıdaki örnekte biri çekirdek sepet hizmeti, diğeri de sepet hizmetinin panosu için iki HttpClient sınıfı eklenmiştir.

Yapılandırma kullanarak adlandırılmış uç noktalar

Yapılandırma tabanlı uç nokta çözümleyicisi ile, adlandırılmış uç noktalar, uç nokta değerinin önüne _endpointName.eklenerek yapılandırmada belirtilebilir; burada endpointName uç nokta adıdır. Örneğin, varsayılan uç noktayı (adsız) ve "pano" adlı uç noktayı tanımlayan bu appsettings.json yapılandırmasını göz önünde bulundurun:

{
  "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 */
    }
  }
}

Önceki JSON:

  • https://basket çözümlendiğinde varsayılan uç nokta 10.2.3.4:8080.
  • "Pano son noktası https://_dashboard.basket aracılığıyla çözümlendiği için 10.2.3.4:9999konumundadır."

.NET .NET Aspire'de adlandırılmış uç noktalar

var basket = builder.AddProject<Projects.BasketService>("basket")
    .WithHttpsEndpoint(hostPort: 9999, name: "dashboard");

DNS SRV kullanarak Kubernetes'da adlandırılmış uç noktalar

Kubernetesdağıtılırken, adlandırılmış uç noktaları çözümlemek için DNS SRV hizmet uç noktası çözümleyicisi kullanılabilir. Örneğin, aşağıdaki kaynak tanımı, "sepet" adlı hizmet üzerindeki "default" ve "pano" adlı uç noktalar için bir DNS SRV kaydı oluşturulmasına neden olacaktır.

apiVersion: v1
kind: Service
metadata:
  name: basket
spec:
  selector:
    name: basket-service
  clusterIP: None
  ports:
  - name: default
    port: 8080
  - name: dashboard
    port: 9999

Bir hizmeti "sepet" hizmetindeki "gösterge paneli" uç noktasını çözümleyecek şekilde yapılandırmak için, DNS SRV hizmet uç noktası çözümleyicisini aşağıdaki şekilde konak oluşturucuya ekleyin.

builder.Services.AddServiceDiscoveryCore();
builder.Services.AddDnsSrvServiceEndpointProvider();

Daha fazla bilgi için bkz. AddServiceDiscoveryCore ve AddDnsSrvServiceEndpointProvider.

"default" özel bağlantı noktası adı, URI https://basketkullanılarak çözümlenen varsayılan uç noktayı belirtmek için kullanılır.

Önceki örnekte olduğu gibi, sepet hizmeti için bir HttpClient'ya servis keşfi ekleyin:

builder.Services.AddHttpClient<BasketServiceClient>(
    static client => client.BaseAddress = new("https://basket"));

Benzer şekilde, "pano" uç noktası aşağıdaki gibi hedeflenebilir:

builder.Services.AddHttpClient<BasketServiceDashboardClient>(
    static client => client.BaseAddress = new("https://_dashboard.basket"));

Ayrıca bkz.