.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 ServiceDiscoveryOptions
ve 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 false
AllowedSchemes
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 true
ayarlayı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:8080
ve "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 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.
Üzerinde uzantı yöntemi IServiceCollection
kullanılarak AddServiceDiscoveryCore
ana bilgisayara hizmet bulma eklendiyse, geçiş sağlayıcısı üzerinde IServiceCollection
uzantı yöntemi çağrılarak AddPassThroughServiceEndpointProvider eklenebilir.