Ereignisse
17. März, 23 Uhr - 21. März, 23 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrierenDieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge aus, um die neuesten Funktionen, Sicherheitsupdates und technischen Support zu nutzen.
In diesem Artikel erfahren Sie, wie die Service Discovery innerhalb eines .NET.NET Aspire Projekts funktioniert. .NET .NET Aspire umfasst Funktionen zum Einrichten der Serviceerkennung während der Entwicklung und des Testens. Die Dienstermittlungsfunktionalität funktioniert, indem die Konfiguration im vom .NET AppHost-Projekt erwarteten Format für den konfigurationsbasierten Endpunktlöser .NET Aspire bereitgestellt wird. Diese Konfiguration wird an die einzelnen Dienstprojekte weitergegeben, die dem Anwendungsmodell hinzugefügt wurden. Weitere Informationen finden Sie unter Service Discovery in .NET.
Die Konfiguration für die Dienstermittlung wird nur für Dienste hinzugefügt, auf die von einem bestimmten Projekt verwiesen wird. Betrachten Sie beispielsweise das folgende AppHost-Programm:
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);
Im vorherigen Beispiel verweist das -Frontend--Projekt auf das -Katalog--Projekt und auf das -Warenkorb--Projekt. Die beiden WithReference Aufrufe weisen das .NET.NET Aspire Projekt an, Service-Discovery-Informationen für die referenzierten Projekte, denKatalogund den Korb, in das Frontend- Projekt zu übertragen.
Einige Dienste machen mehrere benannte Endpunkte verfügbar. Benannte Endpunkte können aufgelöst werden, indem der Endpunktname im Hostanteil des HTTP-Anforderungs-URI, nach dem Format scheme://_endpointName.serviceName
, angegeben wird. Wenn beispielsweise ein Dienst namens "basket" einen Endpunkt namens "dashboard" verfügbar macht, kann der URI-https+http://_dashboard.basket
verwendet werden, um diesen Endpunkt anzugeben, z. B.:
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"));
Im vorherigen Beispiel werden zwei HttpClient Klassen hinzugefügt, eine für den Kernkorbdienst und eine für das Dashboard des Korbdiensts.
Mit dem konfigurationsbasierten Endpunktlöser können benannte Endpunkte in der Konfiguration angegeben werden, indem dem Endpunktwert _endpointName.
vorangestellt wird, wobei endpointName
der Endpunktname ist. Betrachten Sie beispielsweise diese appsettings.json Konfiguration, die einen Standardendpunkt (ohne Namen) und einen Endpunkt namens "dashboard" definiert hat:
{
"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 */
}
}
}
Im vorherigen JSON:
https://basket
ist 10.2.3.4:8080
.https://_dashboard.basket
aufgelöst wird, ist 10.2.3.4:9999
.var basket = builder.AddProject<Projects.BasketService>("basket")
.WithHttpsEndpoint(hostPort: 9999, name: "dashboard");
Bei der Bereitstellung auf Kuberneteskann der DNS SRV-Dienstendpunkt-Auflöser verwendet werden, um benannte Endpunkte aufzulösen. Die folgende Ressourcendefinition führt beispielsweise dazu, dass sowohl für einen Endpunkt mit dem Namen "default" als auch einen Endpunkt mit dem Namen "dashboard" ein DNS-SRV-Eintrag erstellt wird, die beide zum Dienst mit dem Namen "basket" gehören.
apiVersion: v1
kind: Service
metadata:
name: basket
spec:
selector:
name: basket-service
clusterIP: None
ports:
- name: default
port: 8080
- name: dashboard
port: 9999
Um einen Dienst so zu konfigurieren, dass der Endpunkt "dashboard" im Dienst "basket" aufgelöst wird, fügen Sie den DNS SRV-Dienstendpunkt-Resolver wie folgt zum Host-Builder hinzu:
builder.Services.AddServiceDiscoveryCore();
builder.Services.AddDnsSrvServiceEndpointProvider();
Weitere Informationen finden Sie unter AddServiceDiscoveryCore und AddDnsSrvServiceEndpointProvider.
Der spezielle Portname "default" wird verwendet, um den Standardendpunkt anzugeben, der mithilfe des URI-https://basket
aufgelöst wird.
Fügen Sie, wie im vorherigen Beispiel gezeigt, eine Diensterkennung zu einer HttpClient
für den Korbdienst hinzu.
builder.Services.AddHttpClient<BasketServiceClient>(
static client => client.BaseAddress = new("https://basket"));
Ebenso kann der Endpunkt "Dashboard" wie folgt ausgerichtet werden:
builder.Services.AddHttpClient<BasketServiceDashboardClient>(
static client => client.BaseAddress = new("https://_dashboard.basket"));
Feedback zu .NET Aspire
.NET Aspire ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Ereignisse
17. März, 23 Uhr - 21. März, 23 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrierenSchulung
Lernpfad
Erstellen verteilter Apps mit .NET Aspire - Training
Erfahren Sie, wie Sie mit .NET Aspire beobachtbare, produktionsreife, verteilte Anwendungen erstellen.