обнаружение сервисов .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);
В предыдущем примере интерфейсный проект
Именованные конечные точки
Некоторые службы предоставляют несколько именованных конечных точек. Именованные конечные точки можно разрешить, указав имя конечной точки в части узла 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"));
См. также
- Обнаружение служб в .NET
- сделать HTTP-запросы с помощью класса HttpClient
- IHttpClientFactory с .NET
.NET Aspire