O .NET Aspire inclui funcionalidades para configurar a descoberta de serviços durante o desenvolvimento e testes. A funcionalidade de descoberta de serviços funciona fornecendo configuração no formato esperado pelo resolvedor de endpoints baseado em configuração do projeto .NET Aspire AppHost para os projetos de serviço individuais adicionados ao modelo de aplicação.
Atualmente, o MyWeatherHub
está usando uma configuração estática para se conectar ao Api
. Isso não é ideal por várias razões, incluindo:
- O número da porta do serviço
Api
pode mudar. - O endereço IP do serviço
Api
pode mudar. - Múltiplas configurações precisariam ser definidas para as configurações http e https.
- À medida que adicionamos mais serviços, a configuração se tornaria mais complexa.
Para resolver esses problemas, usaremos a funcionalidade de descoberta de serviços fornecida pelo projeto .NET Aspire AppHost. Isso permitirá que o serviço MyWeatherHub
descubra o serviço Api
em tempo de execução.
-
Abra o arquivo
Program.cs
no projetoAppHost
. -
Anteriormente, adicionamos orquestração para incluir vários projetos usando o método
builder.AddProject
. Isso retornou umIResourceBuild
que pode ser usado para referenciar projetos. Vamos referenciar o projetoApi
no projetoMyWeatherHub
atualizando o código:var api = builder.AddProject<Projects.Api>("api"); var web = builder.AddProject<Projects.MyWeatherHub>("myweatherhub") .WithReference(api) .WithExternalHttpEndpoints();
-
O método
WithReference
é usado para referenciar o projetoApi
. Isso permitirá que o projetoMyWeatherHub
descubra o projetoApi
em tempo de execução. -
Se você decidir implantar este aplicativo mais tarde, precisará da chamada para
WithExternalHttpEndpoints
para garantir que ele seja público para o mundo externo.
Quando adicionamos ServiceDefaults aos projetos, nós automaticamente os inscrevemos no sistema de descoberta de serviços. Isso significa que o projeto MyWeatherHub
já está configurado para usar a descoberta de serviços.
Alguns serviços expõem múltiplos endpoints (named endpoints). Endpoints podem ser resolvidos especificando o nome do endpoint na parte do host da URI da solicitação HTTP, seguindo o formato scheme://_endpointName.serviceName
. Por exemplo, se um serviço chamado "basket" expõe um endpoint chamado "dashboard", então 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, o BasketServiceClient
usará o endpoint padrão do serviço basket
, enquanto o BasketServiceDashboardClient
usará o endpoint dashboard
do serviço basket
. Agora, vamos atualizar o projeto MyWeatherHub
para usar a descoberta de serviços para se conectar ao serviço Api
.
Isso pode ser realizado atualizando as configurações existentes de WeatherEndpoint
no appsettings.json
. Isso é conveniente ao habilitar o .NET Aspire em um aplicativo já implantado, pois você pode continuar a usar suas configurações existentes.
-
Abra o arquivo
appsettings.json
no projetoMyWeatherHub
. -
Atualize as configurações de
WeatherEndpoint
para usar a descoberta de serviços:"WeatherEndpoint": "https+http://api"
-
A configuração de
WeatherEndpoint
agora está usando a descoberta de serviços para se conectar ao serviçoApi
.
Opcionalmente, podemos atualizar a url para não usar as configurações de WeatherEndpoint
.
-
Abra o arquivo
Program.cs
no projetoMyWeatherHub
. -
Atualize as configurações de
WeatherEndpoint
para usar a descoberta de serviços:builder.Services.AddHttpClient<NwsManager>( static client => client.BaseAddress = new("https+http://api"));
-
Execute a aplicação pressionando
F5
ou selecionando a opçãoStart Debugging
. -
Abra o
MyWeatheApp
selecionando o endpoint no painel. -
Observe que o aplicativo
MyWeatherHub
ainda funciona e agora está usando a descoberta de serviços para se conectar ao serviçoApi
. -
No painel, clique em
Details
para o projetoMyWeatherHub
. Isso mostrará todas as configurações que o .NET Aspire configurou ao executar o aplicativo a partir do App Host -
Clique no ícone de olho para revelar os valores e role até o final onde você verá
services__api_http_0
eservices__api_https_0
configurados com os valores corretos do serviçoApi
.
Isso foi apenas o começo do que podemos fazer com a descoberta de serviços e o .NET Aspire. À medida que nossa aplicação cresce e adicionamos mais serviços, podemos continuar a usar a descoberta de serviços para conectar serviços em tempo de execução. Isso nos permitirá escalar nossa aplicação facilmente e torná-la mais resiliente a mudanças no ambiente.
Você pode aprender mais sobre o uso avançado e configuração da descoberta de serviços na documentação do .NET Aspire Service Discovery.