.NET .NET Aspire descoberta de serviço
Neste artigo, você aprenderá como a descoberta de serviço funciona em um projeto .NET.NET Aspire. .NET .NET Aspire inclui funcionalidade para configurar a descoberta de serviços no momento do desenvolvimento e do teste. A funcionalidade de descoberta de serviços funciona fornecendo a configuração no formato esperado pelo resolvedor de endpoints baseado em configuração do projeto AppHost .NET.NET Aspire aos projetos de serviço individuais adicionados ao modelo da aplicação. Para obter mais informações, consulte Descoberta de serviço no .NET.
Descoberta de serviço implícita por referência
A configuração para descoberta de serviço só é adicionada para serviços que são referenciados por um determinado projeto. Por exemplo, considere o seguinte programa 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);
No exemplo anterior, o projeto frontend faz referência ao projeto catálogo e ao projeto cesta. As duas chamadas de WithReference instruem o projeto .NET.NET Aspire a passar informações de descoberta de serviço para os projetos referenciados (catálogoe cesta ) para o projeto de front-end .
Pontos de extremidade nomeados
Alguns serviços expõem múltiplos pontos de extremidade com nomes específicos. Os pontos de extremidade nomeados podem ser resolvidos especificando o nome do ponto de extremidade na parte do host do URI de solicitação HTTP, seguindo o formato scheme://_endpointName.serviceName
. Por exemplo, se um serviço chamado "cesto" expõe um endpoint chamado "dashboard", a URI scheme+http://_dashboard.basket
pode ser usada para especificar este endpoint, por exemplo:
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"));
No exemplo anterior, duas classes HttpClient são adicionadas, uma para o serviço de cesta principal e outra para o painel do serviço de cesta.
Pontos de extremidade nomeados usando a configuração
Com o resolvedor de ponto de extremidade baseado em configuração, os pontos de extremidade nomeados podem ser especificados na configuração prefixando o valor do ponto de extremidade com _endpointName.
, onde endpointName
é o nome do ponto de extremidade. Por exemplo, considere esta configuração appsettings.json que definiu um ponto de extremidade padrão (sem nome) e um ponto de extremidade chamado "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 */
}
}
}
No JSONanterior :
- O ponto de extremidade padrão é
10.2.3.4:8080
ao resolverhttps://basket
. - O endpoint "painel", resolvido via
https://_dashboard.basket
, é10.2.3.4:9999
.
Pontos de extremidade nomeados em .NET.NET Aspire
var basket = builder.AddProject<Projects.BasketService>("basket")
.WithHttpsEndpoint(hostPort: 9999, name: "dashboard");
Pontos de extremidade nomeados em Kubernetes usando DNS SRV
Ao implantar no Kubernetes, o resolvedor de ponto de extremidade do serviço SRV DNS pode ser usado para resolver pontos de extremidade nomeados. Por exemplo, a definição de recurso a seguir resultará na criação de um registo SRV DNS para um ponto de extremidade chamado "default" e outro ponto de extremidade chamado "dashboard", ambos no serviço chamado "basket".
apiVersion: v1
kind: Service
metadata:
name: basket
spec:
selector:
name: basket-service
clusterIP: None
ports:
- name: default
port: 8080
- name: dashboard
port: 9999
Para configurar um serviço para resolver o ponto de extremidade "dashboard" no serviço "basket", adicione o resolvedor de ponto de extremidade do serviço SRV DNS ao construtor de hosts da seguinte maneira:
builder.Services.AddServiceDiscoveryCore();
builder.Services.AddDnsSrvServiceEndpointProvider();
Para obter mais informações, consulte AddServiceDiscoveryCore e AddDnsSrvServiceEndpointProvider.
O nome da porta especial "default" é usado para especificar o ponto de extremidade padrão, resolvido usando o URI https://basket
.
Como no exemplo anterior, adicione a descoberta de serviço a um HttpClient
para o serviço de carrinho:
builder.Services.AddHttpClient<BasketServiceClient>(
static client => client.BaseAddress = new("https://basket"));
Da mesma forma, o ponto de extremidade "dashboard" pode ser direcionado da seguinte forma:
builder.Services.AddHttpClient<BasketServiceDashboardClient>(
static client => client.BaseAddress = new("https://_dashboard.basket"));