Udostępnij za pośrednictwem


Odnajdywanie usługi na platformie .NET

Z tego artykułu dowiesz się, jak używać Microsoft.Extensions.ServiceDiscovery biblioteki. Odnajdywanie usług to sposób, aby deweloperzy używali nazw logicznych zamiast adresów fizycznych (adres IP i port) w celu odwoływania się do usług zewnętrznych.

Rozpocznij

Aby rozpocząć odnajdywanie usług na platformie .NET, zainstaluj pakiet NuGet Microsoft.Extensions.ServiceDiscovery .

dotnet add package Microsoft.Extensions.ServiceDiscovery --prerelease

Aby uzyskać więcej informacji, zobacz dotnet add package or Manage package dependencies in .NET applications (Zarządzanie zależnościami pakietów w aplikacjach platformy .NET).

Przykładowe użycie

W pliku Program.cs projektu wywołaj AddServiceDiscovery metodę rozszerzenia, aby dodać odnajdywanie usług do hosta, konfigurując domyślne narzędzia rozpoznawania punktów końcowych usługi:

builder.Services.AddServiceDiscovery();

Dodaj odnajdywanie usług do osoby, IHttpClientBuilder wywołując metodę AddServiceDiscovery rozszerzenia:

builder.Services.AddHttpClient<CatalogServiceClient>(static client =>
    {
        client.BaseAddress = new("https://catalog");
    })
    .AddServiceDiscovery();

Możesz też domyślnie dodać odnajdywanie usług do wszystkich HttpClient wystąpień:

builder.Services.ConfigureHttpClientDefaults(static http =>
{
    // Turn on service discovery by default
    http.AddServiceDiscovery();
});

Wybór schematu podczas rozpoznawania punktów końcowych HTTP

Często używa się protokołu HTTP podczas opracowywania i testowania usługi lokalnie i HTTPS podczas wdrażania usługi. Funkcja odnajdywania usług obsługuje tę funkcję, umożliwiając określenie listy priorytetów schematów identyfikatorów URI w ciągu wejściowym nadanym odnajdywaniem usługi. Odnajdywanie usługi podejmie próbę rozwiązania usług dla schematów w kolejności i zatrzyma się po znalezieniu punktu końcowego. Schematy identyfikatorów URI są oddzielone znakiem + , na przykład: "https+http://basket". Odnajdywanie usługi najpierw spróbuje znaleźć punkty końcowe HTTPS dla "basket" usługi, a następnie powróci do punktów końcowych HTTP. Jeśli zostanie znaleziony jakikolwiek punkt końcowy HTTPS, odnajdywanie usługi nie będzie zawierać punktów końcowych HTTP.

Schematy można filtrować, konfigurując AllowedSchemes właściwości i AllowAllSchemes w pliku ServiceDiscoveryOptions. Właściwość AllowAllSchemes służy do wskazywania, że wszystkie schematy są dozwolone. Domyślnie AllowAllSchemes wartość to , true a wszystkie schematy są dozwolone. Schematy mogą być ograniczone przez ustawienie AllowAllSchemes i false dodanie dozwolonych schematów do AllowedSchemes właściwości. Aby na przykład zezwolić tylko na protokół HTTPS:

services.Configure<ServiceDiscoveryOptions>(options =>
{
    options.AllowAllSchemes = false;
    options.AllowedSchemes = ["https"];
});

Aby jawnie zezwolić na wszystkie schematy, ustaw ServiceDiscoveryOptions.AllowAllSchemes właściwość na true:

services.Configure<ServiceDiscoveryOptions>(
    options => options.AllowAllSchemes = true);

Rozwiązywanie problemów z punktami końcowymi usługi z konfiguracji

Metoda AddServiceDiscovery rozszerzenia domyślnie dodaje program rozpoznawania punktów końcowych oparty na konfiguracji. Ten program rozpoznawania kodu odczytuje punkty końcowe z systemu konfiguracji platformy .NET. Biblioteka obsługuje konfigurację za pośrednictwem appsettings.json, zmiennych środowiskowych lub dowolnego innego IConfiguration źródła.

Oto przykład pokazujący sposób konfigurowania punktów końcowych dla usługi o nazwie catalog za pomocą polecenia appsettings.json:

{
  "Services": {
    "catalog": {
      "https": [
        "localhost:8080",
        "10.46.24.90:80"
      ]
    }
  }
}

W poprzednim przykładzie dodano dwa punkty końcowe dla usługi o nazwie catalog: https://localhost:8080i "https://10.46.24.90:80". Za każdym razem, gdy wykaz jest rozpoznawany, wybierany jest jeden z tych punktów końcowych.

Jeśli odnajdywanie usługi zostało dodane do hosta przy użyciu AddServiceDiscoveryCore metody rozszerzenia w systemie IServiceCollection, można dodać program rozpoznawania punktów końcowych oparty na konfiguracji, wywołując metodę AddConfigurationServiceEndpointProvider rozszerzenia w pliku IServiceCollection.

Konfigurowanie

Program rozpoznawania konfiguracji jest skonfigurowany przy użyciu ConfigurationServiceEndpointProviderOptions klasy , która oferuje następujące opcje konfiguracji:

  • SectionName: nazwa sekcji konfiguracji, która zawiera punkty końcowe usługi. Wartość domyślna to "Services".

  • ApplyHostNameMetadata: delegat używany do określania, czy metadane nazwy hosta powinny być stosowane do rozpoznanych punktów końcowych. Domyślnie jest to funkcja zwracająca wartość false.

Aby skonfigurować te opcje, możesz użyć Configure metody rozszerzenia w IServiceCollection klasie lub Program pliku aplikacjiStartup:

var builder = WebApplication.CreateBuilder(args);

builder.Services.Configure<ConfigurationServiceEndPointResolverOptions>(
    static options =>
    {
        options.SectionName = "MyServiceEndpoints";

        // Configure the logic for applying host name metadata
        options.ApplyHostNameMetadata = static endpoint =>
        {
            // Your custom logic here. For example:
            return endpoint.EndPoint is DnsEndPoint dnsEp
                && dnsEp.Host.StartsWith("internal");
        };
    });

W poprzednim przykładzie pokazano ustawienie niestandardowej nazwy sekcji dla punktów końcowych usługi i zapewnienie niestandardowej logiki warunkowej do stosowania metadanych nazwy hosta.

Rozwiązywanie problemów z punktami końcowymi usługi przy użyciu odnajdywania usług udostępnianych przez platformę

Niektóre platformy, takie jak Azure Container Apps i Kubernetes (skonfigurowane odpowiednio), oferują funkcje odnajdywania usług bez konieczności biblioteki klienta odnajdywania usługi. W przypadkach, gdy aplikacja jest wdrażana w takich środowiskach, korzystanie z wbudowanych funkcji platformy może być korzystne. Rozwiązanie rozpoznawania przekazywanego zostało zaprojektowane w celu ułatwienia tego scenariusza. Umożliwia wykorzystanie alternatywnych rozwiązań rozpoznawania, takich jak konfiguracja, w różnych środowiskach, takich jak maszyna dewelopera. Co ważne, ta elastyczność jest osiągana bez konieczności modyfikacji kodu ani implementacji funkcji ochrony warunkowej.

Rozpoznawanie przekazywane nie wykonuje rozpoznawania zewnętrznego i zamiast tego rozpoznaje punkty końcowe, zwracając nazwę usługi wejściowej reprezentowaną DnsEndPointjako .

Dostawca przekazywania jest konfigurowany domyślnie podczas dodawania odnajdywania usługi za pośrednictwem AddServiceDiscovery metody rozszerzenia.

Jeśli odnajdywanie usługi zostało dodane do hosta przy użyciu AddServiceDiscoveryCore metody rozszerzenia w systemie IServiceCollection, można dodać dostawcę przekazywania przez wywołanie AddPassThroughServiceEndpointProvider metody rozszerzenia w systemie IServiceCollection.

Zobacz też