Compartilhar via


descoberta de serviço .NET.NET Aspire

Neste artigo, você aprenderá como a descoberta de serviço funciona em um projeto de .NET.NET Aspire. .NET .NET Aspire inclui funcionalidade para configurar a descoberta de serviço durante o desenvolvimento e os testes. A funcionalidade de descoberta de serviço opera fornecendo configurações no formato esperado pelo resolvedor de ponto de extremidade baseado em configuração do projeto .NET.NET Aspire AppHost, para que sejam utilizadas pelos projetos de serviço individuais adicionados ao modelo de aplicação. Para obter mais informações, consulte descoberta de serviços em .NET.

Descoberta de serviço implícita por referência

A configuração para descoberta de serviço só é adicionada para serviços 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 de front-end faz referência ao projeto do catálogo e ao projeto de cesta . As duas chamadas 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 front-end .

Pontos de extremidade nomeados

Alguns serviços expõem vários endpoints com nome. Os pontos de extremidade nomeados podem ser resolvidos especificando o nome do ponto de extremidade na parte de host do URI de solicitação HTTP, seguindo o formato scheme://_endpointName.serviceName. Por exemplo, se um serviço chamado "basket" expor um ponto de extremidade chamado "dashboard", o URI scheme+http://_dashboard.basket poderá ser usado para especificar esse ponto de extremidade, 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 básica 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., em que endpointName é o nome do ponto de extremidade. Por exemplo, considere essa 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:

  • Ao resolver https://basket, o ponto de extremidade padrão é 10.2.3.4:8080.
  • O endpoint "dashboard", resolvido via https://_dashboard.basket é 10.2.3.4:9999.

Pontos de extremidade nomeados no .NET.NET Aspire

var basket = builder.AddProject<Projects.BasketService>("basket")
    .WithHttpsEndpoint(hostPort: 9999, name: "dashboard");

Endpoints nomeados em Kubernetes usando DNS SRV

Ao implantar em Kubernetes, pode-se usar o resolvedor de endpoint de serviço SRV do DNS para resolver endpoints nomeados. Por exemplo, a definição de recurso a seguir resultará na criação de um registro SRV de DNS para um ponto de extremidade chamado "padrão" e um 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 endpoint "dashboard" no serviço "cesta", adicione o resolvedor de endpoint de serviço DNS SRV ao construtor de host da seguinte maneira:

builder.Services.AddServiceDiscoveryCore();
builder.Services.AddDnsSrvServiceEndpointProvider();

Para obter mais informações, consulte AddServiceDiscoveryCore e AddDnsSrvServiceEndpointProvider.

O nome da porta especial "padrão" é usado para especificar o ponto de extremidade padrão, determinado usando o URI https://basket.

Como no exemplo anterior, adicione a descoberta de serviços a um HttpClient para o serviço de cesta:

builder.Services.AddHttpClient<BasketServiceClient>(
    static client => client.BaseAddress = new("https://basket"));

Da mesma forma, o endpoint "dashboard" pode ser direcionado da seguinte forma:

builder.Services.AddHttpClient<BasketServiceDashboardClient>(
    static client => client.BaseAddress = new("https://_dashboard.basket"));

Consulte também