Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste artigo, você aprenderá a usar a Microsoft.Extensions.ServiceDiscovery
biblioteca. A descoberta de serviço é uma maneira de os desenvolvedores usarem nomes lógicos em vez de endereços físicos (endereço IP e porta) para se referir a serviços externos.
Comece agora
Para começar a usar a descoberta de serviço no .NET, instale o pacote NuGet Microsoft.Extensions.ServiceDiscovery .
dotnet add package Microsoft.Extensions.ServiceDiscovery --prerelease
Ou, se você estiver usando o SDK do .NET 10+:
dotnet package add Microsoft.Extensions.ServiceDiscovery --prerelease
Para obter mais informações, consulte dotnet package add ou Gerenciar dependências de pacotes em aplicativos .NET.
Exemplo de uso
No arquivo Program.cs do projeto, chame o método de extensão AddServiceDiscovery para adicionar a descoberta de serviço ao host, configurando resolvedores de ponto de extremidade de serviço padrão:
builder.Services.AddServiceDiscovery();
Adicione a descoberta de serviço a um IHttpClientBuilder individual chamando o método de extensão AddServiceDiscovery
:
builder.Services.AddHttpClient<CatalogServiceClient>(static client =>
{
client.BaseAddress = new("https://catalog");
})
.AddServiceDiscovery();
Como alternativa, você pode adicionar a descoberta de serviço a todas as HttpClient instâncias por padrão:
builder.Services.ConfigureHttpClientDefaults(static http =>
{
// Turn on service discovery by default
http.AddServiceDiscovery();
});
Seleção de esquema ao resolver pontos de extremidade HTTP(S)
É comum usar HTTP ao desenvolver e testar um serviço localmente e HTTPS quando o serviço é implantado. A Descoberta de Serviços dá suporte a isso permitindo que uma lista de prioridades de esquemas de URI seja especificada na cadeia de caracteres de entrada fornecida à Descoberta de Serviço. A Descoberta de Serviços tentará resolver os serviços para os esquemas em ordem e será interrompida depois que um ponto de extremidade for encontrado. Os esquemas de URI são separados por um +
caractere, por exemplo: "https+http://basket"
. A Descoberta de Serviços primeiro tentará encontrar pontos de extremidade HTTPS para o "basket"
serviço e, em seguida, retornará aos pontos de extremidade HTTP. Se algum ponto de extremidade HTTPS for encontrado, a Descoberta de Serviço não incluirá pontos de extremidade HTTP.
Esquemas podem ser filtrados configurando as propriedades AllowedSchemes
e AllowAllSchemes
em ServiceDiscoveryOptions
. A AllowAllSchemes
propriedade é usada para indicar que todos os esquemas são permitidos. Por padrão, AllowAllSchemes
é true
e todos os esquemas são permitidos. Os esquemas podem ser restringidos definindo AllowAllSchemes
para false
e adicionando esquemas permitidos à propriedade AllowedSchemes
. Por exemplo, para permitir apenas HTTPS:
services.Configure<ServiceDiscoveryOptions>(options =>
{
options.AllowAllSchemes = false;
options.AllowedSchemes = ["https"];
});
Para permitir explicitamente todos os esquemas, defina a ServiceDiscoveryOptions.AllowAllSchemes
propriedade como true
:
services.Configure<ServiceDiscoveryOptions>(
options => options.AllowAllSchemes = true);
Resolver pontos de extremidade de serviço por meio da configuração
O método de extensão AddServiceDiscovery
adiciona um resolvedor de ponto de extremidade baseado em configuração por padrão.
Este resolver lê endpoints do sistema de configuração do .NET. A biblioteca dá suporte à configuração por meio de appsettings.json, variáveis de ambiente ou qualquer outra IConfiguration origem.
Veja um exemplo que demonstra como configurar pontos de extremidade para o serviço chamado catalog por meio de appsettings.json
:
{
"Services": {
"catalog": {
"https": [
"localhost:8080",
"10.46.24.90:80"
]
}
}
}
O exemplo anterior adiciona dois pontos de extremidade para o serviço chamado catálogo: https://localhost:8080
e "https://10.46.24.90:80"
. Cada vez que o catalog é resolvido, um desses pontos de extremidade é selecionado.
Se a descoberta de serviço foi adicionada ao host por meio do método de extensão AddServiceDiscoveryCore em IServiceCollection, o resolvedor de ponto de extremidade baseado em configuração pode ser adicionado chamando o método de extensão AddConfigurationServiceEndpointProvider em IServiceCollection
.
Configuração
O resolvedor de configuração é configurado usando a ConfigurationServiceEndpointProviderOptions classe, que oferece estas opções de configuração:
SectionName: o nome da seção de configuração que contém os pontos de extremidade de serviço. O padrão é
"Services"
.ApplyHostNameMetadata: um representante usado para determinar se os metadados do nome do host devem ser aplicados aos pontos de extremidade resolvidos. Ele usa como padrão uma função que retorna
false
.
Para configurar essas opções, você pode usar o Configure
método de extensão na classe Startup
ou no arquivo Program
do seu aplicativo.
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");
};
});
O exemplo anterior demonstra a definição de um nome de seção personalizado para seus pontos de extremidade de serviço e o fornecimento de uma lógica condicional personalizada para aplicar os metadados do nome do host.
Resolver os pontos de extremidade de serviço usando a descoberta de serviço fornecida pela plataforma
Determinadas plataformas, como Aplicativos de Contêiner do Azure e Kubernetes (quando configuradas adequadamente), oferecem recursos de descoberta de serviço sem precisar de uma biblioteca de clientes de descoberta de serviço. Nos casos em que um aplicativo é implantado nesses ambientes, usar a funcionalidade interna da plataforma pode ser vantajoso. O resolvedor de passagem foi projetado para facilitar esse cenário. Ele permite a utilização de resolvedores alternativos, como configuração, em ambientes diferentes, como o computador de um desenvolvedor. É importante ressaltar que essa flexibilidade é obtida sem a necessidade de modificações de código ou a implementação de guardas condicionais.
O resolvedor de passagem não realiza nenhuma resolução externa; em vez disso, ele resolve os endpoints retornando o nome do serviço de entrada tal como representado por um DnsEndPoint.
O provedor de passagem é configurado por padrão ao adicionar a descoberta de serviço por meio do método de extensão AddServiceDiscovery
.
Se a descoberta de serviço foi adicionada ao host por meio do método de extensão AddServiceDiscoveryCore
em IServiceCollection
, o provedor de passagem pode ser adicionado chamando o método de extensão AddPassThroughServiceEndpointProvider em IServiceCollection
.