Aracılığıyla paylaş


.NET'te hizmet bulma

Bu makalede Microsoft.Extensions.ServiceDiscovery kitaplığı kullanmayı öğreneceksiniz. Hizmet bulma, geliştiricilerin dış hizmetlere başvurmak için fiziksel adresler (IP adresi ve bağlantı noktası) yerine mantıksal adlar kullanmasının bir yoludur.

Başlayın

.NET'te hizmet bulmayı kullanmaya başlamak için Microsoft.Extensions.ServiceDiscovery NuGet paketini yükleyin.

dotnet add package Microsoft.Extensions.ServiceDiscovery --prerelease

Veya .NET 10+ SDK kullanıyorsanız:

dotnet package add Microsoft.Extensions.ServiceDiscovery --prerelease

Daha fazla bilgi için bkz. dotnet paket ekleme veya .NET uygulamalarında paket bağımlılıklarını yönetme.

Örnek kullanım

Projenizin Program.cs dosyasında, ana bilgisayara hizmet bulma eklemek için uzantı yöntemini çağırın AddServiceDiscovery ve varsayılan hizmet uç noktası çözümleyicilerini yapılandırın:

builder.Services.AddServiceDiscovery();

IHttpClientBuilder uzantı yöntemini çağırarak AddServiceDiscovery servisi keşfi bireysel olarak ekleyin.

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

Alternatif olarak, varsayılan olarak tüm HttpClient örneklere hizmet bulma ekleyebilirsiniz:

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

HTTP(S) uç noktalarını çözümlerken düzen seçimi

Hizmeti yerel olarak geliştirirken ve test ederken HTTP ve hizmet dağıtıldığında HTTPS kullanmak yaygın bir durumdur. Service Discovery, Service Discovery'ye verilen giriş dizesinde URI düzenlerinin öncelik listesinin belirtilmesine izin vererek bunu destekler. Service Discovery, şemaların hizmetlerini sırayla çözümlemeye çalışır ve bir uç nokta bulunduktan sonra durur. URI düzenleri bir + karakterle ayrılır, örneğin: "https+http://basket". Service Discovery önce hizmet için "basket" HTTPS uç noktalarını bulmaya çalışır ve ardından HTTP uç noktalarına geri döner. Herhangi bir HTTPS uç noktası bulunursa, Service Discovery HTTP uç noktalarını içermez.

AllowedSchemes öğesi üzerinde AllowAllSchemes ve ServiceDiscoveryOptions özellikleri yapılandırılarak şemalar filtrelenebilir. AllowAllSchemes özelliği, tüm şemalara izin verildiğini belirtmek için kullanılır. Varsayılan olarak, AllowAllSchemes is true ve tüm şemalara izin verilir. Şemalar, AllowAllSchemes ile false ayarlanarak ve izin verilen şemalar AllowedSchemes özelliğine eklenerek kısıtlanabilir. Örneğin, yalnızca HTTPS'ye izin vermek için:

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

Tüm şemalara açıkça izin vermek için ServiceDiscoveryOptions.AllowAllSchemes özelliğini true olarak ayarlayın.

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

Yapılandırmadan hizmet uç noktalarını çözme

Uzantı yöntemi, varsayılan olarak yapılandırmaya dayalı bir uç nokta çözümleyici ekler. Bu çözümleyici uç noktaları .NET yapılandırma sisteminden okur. Kitaplık ,appsettings.json, ortam değişkenleri veya başka IConfiguration bir kaynak aracılığıyla yapılandırmayı destekler.

Aşağıda, aracılığıyla katalog adlı hizmet için uç noktaları yapılandırmayı gösteren bir örnek verilmiştir appsettings.json:

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

Yukarıdaki örnek, hizmet için katalog adlı iki uç nokta ekler: https://localhost:8080ve "https://10.46.24.90:80". Katalog her çözümlendiğinde bu uç noktalardan biri seçilir.

üzerinde AddServiceDiscoveryCore uzantı yöntemi kullanılarak IServiceCollection konağa hizmet bulma eklendiyse, üzerinde AddConfigurationServiceEndpointProvider uzantı yöntemi çağrılarak IServiceCollection yapılandırma tabanlı uç nokta çözümleyici eklenebilir.

Konfigürasyon

Yapılandırma çözümleyicisi, şu yapılandırma seçeneklerini sunan sınıfı kullanılarak ConfigurationServiceEndpointProviderOptions yapılandırılır:

  • SectionName: Hizmet uç noktalarını içeren yapılandırma bölümünün adı. Varsayılan değer olarak "Services" ayarlanır.

  • ApplyHostNameMetadata: Ana bilgisayar adı meta verilerinin çözümlenen uç noktalara uygulanması gerekip gerekmediğini belirlemek için kullanılan bir temsilci. Varsayılan olarak false döndüren bir işlevdir.

Bu seçenekleri yapılandırmak için, uzantı yöntemini uygulamanızın ConfigureIServiceCollectionStartup sınıfı veya Program dosyası içinde kullanabilirsiniz:

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");
        };
    });

Yukarıdaki örnekte, hizmet uç noktalarınız için özel bölüm adı ayarlama ve konak adı meta verilerini uygulamak için özel koşullu mantık sağlama gösterilmektedir.

Platform tarafından sağlanan hizmet bulma kullanarak hizmet uç noktalarını çözme

Azure Container Apps ve Kubernetes gibi belirli platformlar (uygun şekilde yapılandırıldığında), hizmet bulma istemci kitaplığı gerektirmeden hizmet bulma özellikleri sunar. Bir uygulamanın bu tür ortamlarda dağıtıldığı durumlarda, platformun yerleşik işlevselliğini kullanmak avantajlı olabilir. Doğrudan çözümleyici, bu senaryoyu kolaylaştırmak için tasarlanmıştır. Bir geliştiricinin makinesi gibi farklı ortamlarda yapılandırma gibi alternatif çözümleyicilerin kullanılmasına olanak tanır. Daha da önemlisi, bu esneklik herhangi bir kod değişikliğine veya koşullu korumaların uygulanmasına gerek kalmadan elde edilir.

Geçiş çözümleyicisi dış çözümleme gerçekleştirmez ve bunun yerine olarak DnsEndPointtemsil edilen giriş hizmeti adını döndürerek uç noktaları çözümler.

Uzantı yöntemi aracılığıyla AddServiceDiscovery hizmet bulma eklenirken geçiş sağlayıcısı varsayılan olarak yapılandırılır.

Eğer hizmet bulma AddServiceDiscoveryCore üzerinde uzantı yöntemi kullanılarak ana bilgisayara eklendiyse, geçiş sağlayıcısı IServiceCollection uzantı yöntemi AddPassThroughServiceEndpointProvider üzerinde çağrılarak eklenebilir.

Ayrıca bkz.