.NET Aspire Elasticsearch integração
Inclui:integração de Hosting e integração Client
Elasticsearch é um mecanismo de pesquisa e análise RESTful distribuído, armazenamento de dados escalável e banco de dados vetorial capaz de lidar com um número crescente de casos de uso. A integração de .NET AspireElasticsearch permite que você se conecte a instâncias de Elasticsearch existentes ou crie novas instâncias a partir de .NET com a imagem de contêiner docker.io/library/elasticsearch
.
Integração de hospedagem
A integração de hospedagem Elasticsearch modela uma instância Elasticsearch como o tipo ElasticsearchResource. Para aceder a este tipo e APIs que lhe permitem adicioná-lo ao seu 📦Aspire. Hospedagem.Elasticsearch pacote NuGet no aplicativo host projeto.
- .NET CLI
- Referência de Pacote
dotnet add package Aspire.Hosting.Elasticsearch
Para obter mais informações, consulte dotnet add package ou Gerir dependências de pacotes em aplicações .NET.
Adicionar Elasticsearch recurso
Em seu projeto de host de aplicativo, chame AddElasticsearch na instância builder
para adicionar um recurso Elasticsearch:
var builder = DistributedApplication.CreateBuilder(args);
var elasticsearch = builder.AddElasticsearch("elasticsearch");
builder.AddProject<Projects.ExampleProject>()
.WithReference(elasticsearch);
// After adding all resources, run the app...
Quando .NET.NET Aspire adiciona uma imagem de contêiner ao host do aplicativo, como mostrado no exemplo anterior com a imagem docker.io/library/elasticsearch
, ele cria uma nova instância de Elasticsearch em sua máquina local. Uma referência ao seu recurso Elasticsearch (a variável elasticsearch
) é adicionada ao ExampleProject
. O recurso Elasticsearch inclui credenciais padrão com uma username
de "elastic"
e password
gerados aleatoriamente usando o método CreateDefaultPasswordParameter quando uma senha não foi fornecida.
O método WithReference configura uma conexão no ExampleProject
chamado "elasticsearch"
. Para obter mais informações, consulte Ciclo de vida do recurso de contêiner.
Dica
Se você preferir se conectar a uma instância de Elasticsearch existente, chame AddConnectionString em vez disso. Para obter mais informações, consulte Fazer referência a recursos existentes.
Adicionar recurso Elasticsearch com volume de dados
Para adicionar um volume de dados ao recurso Elasticsearch, chame o método WithDataVolume no recurso Elasticsearch:
var builder = DistributedApplication.CreateBuilder(args);
var elasticsearch = builder.AddElasticsearch("elasticsearch")
.WithDataVolume(isReadOnly: false);
builder.AddProject<Projects.ExampleProject>()
.WithReference(elasticsearch);
// After adding all resources, run the app...
O volume de dados é usado para manter os dados Elasticsearch fora do ciclo de vida de seu contêiner. O volume de dados é montado no caminho /usr/share/elasticsearch/data
no contêiner Elasticsearch e, quando um parâmetro name
não é fornecido, o nome é gerado aleatoriamente. Para obter mais informações sobre volumes de dados e detalhes sobre por que são preferidos em detrimento das montagens de ligação , consulte a documentação Docker: Volumes.
Adicionar Elasticsearch recurso com montagem de associação de dados
Para adicionar uma montagem de ligação de dados ao recurso Elasticsearch, chame o método WithDataBindMount:
var builder = DistributedApplication.CreateBuilder(args);
var elasticsearch = builder.AddElasticsearch("elasticsearch")
.WithDataBindMount(
source: @"C:\Elasticsearch\Data",
isReadOnly: false);
builder.AddProject<Projects.ExampleProject>()
.WithReference(elasticsearch);
// After adding all resources, run the app...
Importante
Os suportes de ligação de de dados têm funcionalidade limitada em comparação com volumes, que oferecem melhor desempenho, portabilidade e segurança, tornando-os mais adequados para ambientes de produção. No entanto, as montagens bind permitem o acesso direto e a modificação de arquivos no sistema host, ideal para desenvolvimento e testes onde alterações em tempo real são necessárias.
As montagens de associação de dados dependem do sistema de arquivos da máquina host para manter os dados Elasticsearch nas reinicializações do contêiner. A montagem de associação de dados é montada no caminho C:\Elasticsearch\Data
no Windows (ou /Elasticsearch/Data
no Unix) na máquina host no contêiner Elasticsearch. Para obter mais informações sobre montagens de bind de dados, consulte a documentação Docker: Bind mounts.
Adicionar o recurso Elasticsearch com o parâmetro palavra-passe
Quando quiser fornecer explicitamente a senha usada pela imagem do contêiner, você poderá fornecer essas credenciais como parâmetros. Considere o seguinte exemplo alternativo:
var builder = DistributedApplication.CreateBuilder(args);
var password = builder.AddParameter("password", secret: true);
var elasticsearch = builder.AddElasticsearch("elasticsearch", password);
builder.AddProject<Projects.ExampleProject>()
.WithReference(elasticsearch);
// After adding all resources, run the app...
Para obter mais informações sobre como fornecer parâmetros, consulte Parâmetros externos.
Verificações de integridade da integração de hospedagem
A integração de hospedagem Elasticsearch adiciona automaticamente uma verificação de integridade para o recurso Elasticsearch. A verificação de integridade verifica se a instância Elasticsearch está em execução e se uma conexão pode ser estabelecida com ela.
A integração de hospedagem depende do 📦 AspNetCore.HealthChecks.Elasticsearch pacote NuGet.
Client integração
Para começar com a integração .NET AspireElasticsearchclient, instale o 📦Aspire. Elastic.Clients.Elasticsearch pacote NuGet no projeto de consumo de client, ou seja, o projeto para o aplicativo que usa o Elasticsearchclient. A integração
- .NET CLI
- ReferênciaDePacote
dotnet add package Aspire.Elastic.Clients.Elasticsearch
Adicionar Elasticsearchclient
No arquivo de Program.cs do seu projeto de consumo de client, chame o método de extensão AddElasticsearchClient em qualquer IHostApplicationBuilder para registrar um ElasticsearchClient
para uso por meio do contêiner de injeção de dependência. O método usa um parâmetro de nome de conexão.
builder.AddElasticsearchClient(connectionName: "elasticsearch");
Dica
O parâmetro connectionName
deve corresponder ao nome usado ao adicionar o recurso Elasticsearch no projeto de host do aplicativo. Para obter mais informações, consulte Adicionar Elasticsearch recurso.
Em seguida, você pode recuperar a instância ElasticsearchClient
usando a injeção de dependência. Por exemplo, para recuperar a conexão de um serviço de exemplo:
public class ExampleService(ElasticsearchClient client)
{
// Use client...
}
Adicionar Elasticsearchclient com chave
Pode haver situações em que você queira registrar várias instâncias de ElasticsearchClient
com nomes de conexão diferentes. Para registrar clientes de Elasticsearch chaveados, ligue para o AddKeyedElasticsearchClient:
builder.AddKeyedElasticsearchClient(name: "products");
builder.AddKeyedElasticsearchClient(name: "orders");
Pode-se, em seguida, recuperar as instâncias ElasticsearchClient
usando injeção de dependências. Por exemplo, para recuperar a conexão de um serviço de exemplo:
public class ExampleService(
[FromKeyedServices("products")] ElasticsearchClient productsClient,
[FromKeyedServices("orders")] ElasticsearchClient ordersClient)
{
// Use clients...
}
Para obter mais informações sobre serviços identificados por chave, consulte sobre .NET injeção de dependência: Serviços identificados por chave.
Configuração
A integração .NET AspireElasticsearchclient fornece várias opções para configurar a conexão server com base nos requisitos e convenções do seu projeto.
Usar uma cadeia de conexão
Ao usar uma cadeia de conexão da seção de configuração de ConnectionStrings
, você pode fornecer o nome da cadeia de conexão ao chamar builder.AddElasticsearchClient
:
builder.AddElasticsearchClient("elasticsearch");
Em seguida, a cadeia de conexão será recuperada da seção de configuração ConnectionStrings
:
{
"ConnectionStrings": {
"elasticsearch": "http://elastic:password@localhost:27011"
}
}
Usar provedores de configuração
A integração .NET AspireElasticsearchClient suporta Microsoft.Extensions.Configuration. Ele carrega o ElasticClientsElasticsearchSettings da configuração usando a chave Aspire:Elastic:Clients:Elasticsearch
. Considere o exemplo a seguir appsettings.json que configura algumas das opções:
{
"Aspire": {
"Elastic": {
"Clients": {
"Elasticsearch": {
"DisableHealthChecks": false,
"DisableTracing": false,
"HealthCheckTimeout": "00:00:03",
"ApiKey": "<Valid ApiKey>",
"Endpoint": "http://elastic:password@localhost:27011",
"CloudId": "<Valid CloudId>"
}
}
}
}
}
Para o esquema completo de integração ElasticsearchclientJSON, consulte Aspire.Elastic.Clients.Elasticsearch/ConfigurationSchema.json.
Usar delegados embutidos
Além disso, pode passar o delegado de Action<ElasticClientsElasticsearchSettings> configureSettings
para configurar algumas ou todas as opções diretamente, por exemplo, para definir a chave de API através do código:
builder.AddElasticsearchClient(
"elasticsearch",
static settings =>
settings.Endpoint = new Uri("http://elastic:password@localhost:27011"));
Use um CloudId
e um ApiKey
com provedores de configuração
Ao usar o Elastic Cloud, você pode fornecer os CloudId
e ApiKey
na seção Aspire:Elastic:Clients:Elasticsearch
ao chamar builder.AddElasticsearchClient
.
builder.AddElasticsearchClient("elasticsearch");
Considere o exemplo a seguir appsettings.json que configura as opções:
{
"Aspire": {
"Elastic": {
"Clients": {
"Elasticsearch": {
"ApiKey": "<Valid ApiKey>",
"CloudId": "<Valid CloudId>"
}
}
}
}
}
Utilize um CloudId
e um ApiKey
com delegados em linha
builder.AddElasticsearchClient(
"elasticsearch",
static settings =>
{
settings.ApiKey = "<Valid ApiKey>";
settings.CloudId = "<Valid CloudId>";
});
Client verificações de integridade da integração
Por padrão, as integrações .NET.NET Aspire habilitam verificações de integridade para todos os serviços. Para obter mais informações, consulte .NET.NET Aspire visão geral das integrações.
A integração .NET AspireElasticsearch usa o client configurado para executar um PingAsync
. Se o resultado for um HTTP 200 OK, a verificação de integridade é considerada saudável; caso contrário, é considerada não saudável. Da mesma forma, se houver uma exceção, a verificação de integridade será considerada não saudável, com o erro a propagar-se através da falha da verificação de integridade.
Observabilidade e telemetria
.NET .NET Aspire integrações automaticamente configuram Registo, Rastreio e Métricas, que às vezes são conhecidos como os pilares da observabilidade. Para obter mais informações sobre observabilidade e telemetria de integração, consulte Visão geral de integrações .NET.NET Aspire. Dependendo do serviço de suporte, algumas integrações podem suportar apenas alguns desses recursos. Por exemplo, algumas integrações suportam registro em log e rastreamento, mas não métricas. Os recursos de telemetria também podem ser desativados usando as técnicas apresentadas na secção Configuração.
Rastreio
A integração .NET AspireElasticsearch emitirá as seguintes atividades de rastreio utilizando OpenTelemetry:
Elastic.Transport