Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Из этой статьи вы узнаете, как работает обнаружение служб в 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"));