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:8080
i "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
.