Поделиться через


обнаружение сервисов .NET.NET Aspire

Из этой статьи вы узнаете, как работает обнаружение служб в проекте .NET.NET Aspire. .NET .NET Aspire включает функции для настройки обнаружения служб во время разработки и тестирования. Функциональность обнаружения служб работает, предоставляя конфигурацию в формате, ожидаемом резолвером конечных точек на основе конфигурации из проекта AppHost .NET.NET Aspire. Эта конфигурация применяется в индивидуальных проектах службы, добавленных в модель приложения. Дополнительную информацию см. в разделе «Обнаружение служб в .NET».

Неявное обнаружение службы по ссылке

Конфигурация обнаружения служб добавляется только для служб, на которые ссылается данный проект. Например, рассмотрим следующую программу 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);

В предыдущем примере интерфейсный проект ссылается на проект каталога и проект корзины. Два вызова WithReference инструктируют проект .NET.NET Aspire передать информацию об обнаружении служб для указанных проектов (каталоги корзина) в проект фронтенд.

Именованные конечные точки

Некоторые службы предоставляют несколько именованных конечных точек. Именованные конечные точки можно разрешить, указав имя конечной точки в части узла HTTP-запроса URI, согласно формату scheme://_endpointName.serviceName. Например, если служба с именем "корзина" предоставляет конечную точку с именем "панель мониторинга", URI https+http://_dashboard.basket можно использовать для указания этой конечной точки, например:

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"));

В предыдущем примере добавляются два класса HttpClient, один для основной службы корзины и один для панели мониторинга службы корзины.

Именованные эндпоинты с помощью конфигурации

С помощью конфигурационного сопоставителя конечных точек именованные конечные точки можно указать в конфигурации, префиксируя значение конечной точки, начиная с _endpointName., где endpointName — имя точки. Например, рассмотрим эту appsettings.json конфигурацию, определяющую конечную точку по умолчанию (без имени) и конечную точку с именем "панель мониторинга":

{
  "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 */
    }
  }
}

В предыдущем JSON:

  • Конечная точка по умолчанию при разрешении https://basket является 10.2.3.4:8080.
  • Конечная точка «панели мониторинга», разрешенная с помощью https://_dashboard.basket, — это 10.2.3.4:9999.

Именованные конечные точки в .NET.NET Aspire

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

Именованные конечные точки в Kubernetes с помощью DNS SRV

При развертывании в Kubernetesрезольвер конечной точки службы DNS SRV можно использовать для разрешения именованных конечных точек. Например, следующее определение ресурса приведет к созданию записи DNS SRV для конечной точки с именем "default" и конечной точки с именем "dashboard", обе в сервисе с именем "корзина".

apiVersion: v1
kind: Service
metadata:
  name: basket
spec:
  selector:
    name: basket-service
  clusterIP: None
  ports:
  - name: default
    port: 8080
  - name: dashboard
    port: 9999

Чтобы настроить службу для разрешения конечной точки "dashboard" на службе "корзины", добавьте сопоставитель конечной точки службы DNS SRV в конфигуратор узла следующим образом:

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

Дополнительные сведения см. в AddServiceDiscoveryCore и AddDnsSrvServiceEndpointProvider.

Специальное имя порта "default" используется для указания конечной точки по умолчанию, определяемой с использованием URI https://basket.

Как и в предыдущем примере, добавьте функцию поиска служб в HttpClient для сервиса корзины.

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

Аналогичным образом конечная точка панели мониторинга может быть нацелена следующим образом:

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

См. также