Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:8080
ve "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 Configure
IServiceCollection
Startup
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.