Aracılığıyla paylaş


.NET'te hizmet bulma

Bu makalede kitaplığı kullanmayı Microsoft.Extensions.ServiceDiscovery öğ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.

Kullanmaya 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

Daha fazla bilgi için bkz . dotnet add package veya Manage package dependencies in .NET applications.

Ö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();

Uzantı yöntemini çağırarak AddServiceDiscovery bir kişiye IHttpClientBuilder hizmet bulma 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

Hizmet dağıtılırken bir hizmeti yerel olarak ve HTTPS'yi geliştirirken ve test ederken HTTP 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, düzenlerin 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.

Şemalar üzerinde ServiceDiscoveryOptionsve AllowAllSchemes özellikleri yapılandırılarak AllowedSchemes 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. Düzenlerin ayarı AllowAllSchemes ve özelliğine falseAllowedSchemes izin verilen şemalar 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 özelliğini olarak trueayarlayınServiceDiscoveryOptions.AllowAllSchemes:

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

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

Uzantı yöntemi varsayılan AddServiceDiscovery olarak yapılandırma tabanlı bir uç nokta çözümleyicisi 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ştirappsettings.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 uzantı yöntemi IServiceCollectionkullanılarak AddServiceDiscoveryCore konağa hizmet bulma eklendiyse, üzerinde uzantı yöntemi IServiceCollectionçağrılarak AddConfigurationServiceEndpointProvider yapılandırma tabanlı uç nokta çözümleyicisi eklenebilir.

Yapılandırma

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 olarak olur "Services".

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

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.

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

Ayrıca bkz.