.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,
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.serviceName
biç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ç nokta10.2.3.4:8080
. - "Pano son noktası
https://_dashboard.basket
aracılığıyla çözümlendiği için10.2.3.4:9999
konumundadı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://basket
kullanı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.
'da Hizmeti bulma - HttpClient sınıf ile HTTP istekleri yapma
- IHttpClientFactory ile .NET
.NET Aspire