다음을 통해 공유


.NET .NET Aspire 서비스 검색

이 문서에서는 .NET.NET Aspire 프로젝트 내에서 서비스 검색이 작동하는 방식을 알아봅니다. .NET .NET 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 호출은 참조된 프로젝트(.NET및 .NET Aspire)에 대한 서비스 검색 정보를 프런트 엔드 프로젝트에 전달하도록 프로젝트에 지시합니다.

명명된 엔드포인트

일부 서비스는 명명된 여러 엔드포인트를 노출합니다. 명명된 엔드포인트는 scheme://_endpointName.serviceName형식에 따라 HTTP 요청 URI의 호스트 부분에 엔드포인트 이름을 지정하여 확인할 수 있습니다. 예를 들어 "basket"이라는 서비스가 "대시보드"라는 엔드포인트를 노출하는 경우 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 서비스 엔드포인트 해석기를 사용하여 명명된 엔드포인트를 확인할 수 있습니다. 예를 들어, 다음 리소스 정의는 "basket"이라는 서비스에 포함된 "default" 및 "dashboard"라는 엔드포인트에 대해 DNS SRV 레코드를 생성합니다.

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

"basket" 서비스에서 "대시보드" 엔드포인트를 확인하도록 서비스를 구성하려면 다음과 같이 DNS SRV 서비스 엔드포인트 확인자를 호스트 작성기에 추가합니다.

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

자세한 내용은 AddServiceDiscoveryCoreAddDnsSrvServiceEndpointProvider참조하세요.

특수 포트 이름 "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"));

더 보기