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


Aspire Обнаружение служб

Из этой статьи вы узнаете, как работает обнаружение служб в Aspire проекте. Aspire включает функции для настройки обнаружения служб во время разработки и тестирования. Функциональность обнаружения служб работает путем предоставления конфигурации в формате, ожидаемом резолвером конечных точек на основе конфигурации из Aspire проекта AppHost для отдельных проектов служб, добавленных в модель приложения. Для получения дополнительной информации см. Обнаружение служб в .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 вызова указывают Aspire проекту передать сведения об обнаружении служб для ссылочных проектов (каталог и корзина) в интерфейсный проект.

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

Некоторые службы предоставляют несколько именованных конечных точек. Именованные конечные точки можно разрешить, указав имя конечной точки в узловой части URI HTTP-запроса, следуя формату 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.

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

Именованные конечные точки также могут быть предоставлены кодом в хосте приложения. Например, предыдущий пример можно моделировать следующим образом:

var basket = builder.AddProject<Projects.BasketService>("basket")
    .WithHttpsEndpoint(port: 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" на службе "basket", добавьте резолвер конечной точки службы 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"));

См. также