.NET .NET Aspire individuazione del servizio
Questo articolo illustra il funzionamento dell'individuazione dei servizi all'interno di un progetto .NET.NET Aspire. .NET .NET Aspire include funzionalità per la configurazione dell'individuazione dei servizi in fase di sviluppo e test. La funzionalità di individuazione dei servizi funziona fornendo la configurazione nel formato previsto dal sistema di risoluzione degli endpoint basato sulla configurazione dal progetto .NET.NET Aspire AppHost ai singoli progetti di servizio aggiunti al modello di applicazione. Per ulteriori informazioni, vedere servizio di individuazione in .NET.
Scoperta implicita dei servizi tramite riferimento
La configurazione per l'individuazione dei servizi viene aggiunta solo per i servizi a cui fa riferimento un determinato progetto. Si consideri ad esempio il seguente programma AppHost:
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);
Nell'esempio precedente, il progetto frontend fa riferimento al progetto catalogo e al progetto carrello . Le due chiamate WithReference indicano al progetto di .NET.NET Aspire di passare le informazioni sull'individuazione dei servizi per i progetti a cui si fa riferimento (catalogoe ) nel progetto front-end.
Endpoint nominati
Alcuni servizi espongono più punti di accesso denominati. Gli endpoint denominati possono essere risolti specificando il nome dell'endpoint nella sezione host dell'URI della richiesta HTTP, seguendo il formato scheme://_endpointName.serviceName
. Ad esempio, se un servizio denominato "basket" espone un endpoint denominato "dashboard", l'URI https+http://_dashboard.basket
può essere usato per specificare questo endpoint, ad esempio:
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"));
Nell'esempio precedente vengono aggiunte due classi HttpClient, una per il servizio basket principale e una per il dashboard del servizio basket.
Gli endpoint denominati che usano la configurazione
Con il sistema di risoluzione degli endpoint basato sulla configurazione, gli endpoint denominati possono essere specificati nella configurazione anteponendo il valore dell'endpoint con _endpointName.
, dove endpointName
è il nome dell'endpoint. Si consideri ad esempio questa appsettings.json configurazione che ha definito un endpoint predefinito (senza nome) e un endpoint denominato "dashboard":
{
"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 */
}
}
}
Nella JSONprecedente:
- L'endpoint predefinito, quando si risolve
https://basket
è10.2.3.4:8080
. - L'endpoint "dashboard", risolto tramite
https://_dashboard.basket
è10.2.3.4:9999
.
Endpoint denominati in .NET.NET Aspire
var basket = builder.AddProject<Projects.BasketService>("basket")
.WithHttpsEndpoint(hostPort: 9999, name: "dashboard");
Punti finali nominati in Kubernetes utilizzando DNS SRV
Quando si esegue la distribuzione in Kubernetes, è possibile usare il servizio di risoluzione degli endpoint SRV DNS per risolvere gli endpoint denominati. Ad esempio, la definizione di risorsa seguente comporterà la creazione di un record SRV DNS per un endpoint denominato "default" e un endpoint denominato "dashboard", entrambi nel servizio denominato "basket".
apiVersion: v1
kind: Service
metadata:
name: basket
spec:
selector:
name: basket-service
clusterIP: None
ports:
- name: default
port: 8080
- name: dashboard
port: 9999
Per configurare un servizio per risolvere l'endpoint "dashboard" nel servizio "carrello", aggiungere il sistema di risoluzione dell'endpoint di servizio SRV DNS al generatore host come indicato di seguito:
builder.Services.AddServiceDiscoveryCore();
builder.Services.AddDnsSrvServiceEndpointProvider();
Per altre informazioni, vedere AddServiceDiscoveryCore e AddDnsSrvServiceEndpointProvider.
Il nome di porta speciale "default" viene usato per specificare l'endpoint predefinito, risolto usando l'URI https://basket
.
Come nell'esempio precedente, aggiungere l'individuazione del servizio a un HttpClient
per il servizio carrello:
builder.Services.AddHttpClient<BasketServiceClient>(
static client => client.BaseAddress = new("https://basket"));
Analogamente, l'endpoint "dashboard" può essere indirizzato come segue:
builder.Services.AddHttpClient<BasketServiceDashboardClient>(
static client => client.BaseAddress = new("https://_dashboard.basket"));
Vedere anche
- scoperta del servizio in .NET
- Effettuare richieste HTTP con la classe HttpClient
- IHttpClientFactory con .NET