integratie van .NET AspireElasticsearch
omvat:hostingintegratie en Client integratie
Elasticsearch is een gedistribueerde, RESTful zoek- en analyse-engine, een schaalbaar gegevensarchief en een vectordatabase die in staat is om een toenemend aantal gebruiksvoorbeelden aan te pakken. Met de .NET AspireElasticsearch-integratie kun je verbinding maken met bestaande Elasticsearch-exemplaren of nieuwe exemplaren creëren vanuit .NET met de docker.io/library/elasticsearch
containerafbeelding.
Hostingintegratie
Het Elasticsearch hostintegratiemodel modelleert een Elasticsearch instantie als het ElasticsearchResource type. Voor toegang tot dit type en API's waarmee u het kunt toevoegen aan uw 📦Aspire.Hosting.Elasticsearch NuGet-pakket in het app-hostproject.
dotnet add package Aspire.Hosting.Elasticsearch
Zie dotnet pakket toevoegen of Pakketafhankelijkheden beheren in .NET toepassingenvoor meer informatie.
Elasticsearch-resource toevoegen
Roep in uw app-hostproject AddElasticsearch aan op het builder
exemplaar om een Elasticsearch-resource toe te voegen:
var builder = DistributedApplication.CreateBuilder(args);
var elasticsearch = builder.AddElasticsearch("elasticsearch");
builder.AddProject<Projects.ExampleProject>()
.WithReference(elasticsearch);
// After adding all resources, run the app...
Wanneer .NET.NET Aspire een containerinstallatiekopie toevoegt aan de app-host, zoals wordt weergegeven in het vorige voorbeeld met de docker.io/library/elasticsearch
-installatiekopie, wordt er een nieuw Elasticsearch exemplaar op uw lokale computer gemaakt. Er wordt een verwijzing naar uw Elasticsearch resource (de variabele elasticsearch
) toegevoegd aan de ExampleProject
. De Elasticsearch-resource bevat standaardreferenties met een username
van "elastic"
en willekeurig gegenereerde password
met behulp van de CreateDefaultPasswordParameter methode wanneer er geen wachtwoord is opgegeven.
De methode WithReference configureert een verbinding in de ExampleProject
met de naam "elasticsearch"
. Zie levenscyclus van containerresourcesvoor meer informatie.
Tip
Als u liever verbinding wilt maken met een bestaand Elasticsearch exemplaar, roept u in plaats daarvan AddConnectionString aan. Zie Bestaande resourcesraadplegen voor meer informatie.
Elasticsearch resource toevoegen met gegevensvolume
Als u een gegevensvolume wilt toevoegen aan de Elasticsearch-resource, roept u de methode WithDataVolume aan voor de Elasticsearch resource:
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...
Het gegevensvolume wordt gebruikt om de Elasticsearch gegevens buiten de levenscyclus van de container te behouden. Het gegevensvolume wordt gekoppeld aan het /usr/share/elasticsearch/data
pad in de Elasticsearch container en wanneer er geen name
parameter wordt opgegeven, wordt de naam willekeurig gegenereerd. Zie Docker docs: Volumesvoor meer informatie over gegevensvolumes en details over waarom ze de voorkeur hebben boven bindingskoppelingen.
Elasticsearch resource toevoegen met koppeling voor gegevensbinding
Als u een koppeling voor gegevensbinding wilt toevoegen aan de Elasticsearch-resource, roept u de WithDataBindMount methode aan:
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...
Belangrijk
Gegevens koppelen beperkte functionaliteit hebben in vergelijking met volumes, die betere prestaties, draagbaarheid en beveiliging bieden, waardoor ze geschikter zijn voor productieomgevingen. Bind-mounts bieden echter directe toegang tot en wijzigingen van bestanden op het hostsysteem, ideaal voor ontwikkeling en testen waar real-time wijzigingen nodig zijn.
Gegevensbind-koppelpunten zijn afhankelijk van het bestandssysteem van de hostmachine om de Elasticsearch gegevens te behouden bij het opnieuw opstarten van de container. De koppeling voor gegevensbinding wordt gekoppeld aan de C:\Elasticsearch\Data
in Windows (of /Elasticsearch/Data
op Unix) op de hostcomputer in de Elasticsearch container. Zie Docker docs: Bindingskoppelingenvoor meer informatie over koppelingskoppelingen voor gegevens.
Resource toevoegen Elasticsearch met wachtwoordparameter
Wanneer u expliciet het wachtwoord wilt opgeven dat wordt gebruikt door de containerafbeelding, kunt u deze referenties opgeven als parameters. Bekijk het volgende alternatieve voorbeeld:
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...
Zie Externe parametersvoor meer informatie over het opgeven van parameters.
Gezondheidscontroles voor hostingintegratie
De Elasticsearch hostingintegratie voegt automatisch een statuscontrole toe voor de Elasticsearch resource. De statuscontrole controleert of het Elasticsearch-exemplaar draait en of er een correcte verbinding tot stand kan worden gebracht.
De hostingintegratie is afhankelijk van de 📦 AspNetCore.HealthChecks.Elasticsearch NuGet-pakket.
integratie van Client
Om aan de slag te gaan met de .NET AspireElasticsearchclient-integratie, installeer het 📦Aspire.Elastic.Clients.Elasticsearch NuGet-pakket in het project dat de clientgebruikt, dat wil zeggen, het project voor de toepassing die gebruikmaakt van de Elasticsearchclient. De Elasticsearchclient-integratie registreert een ElasticsearchClient exemplaar dat u kunt gebruiken om met Elasticsearchte communiceren.
dotnet add package Aspire.Elastic.Clients.Elasticsearch
Elasticsearch client toevoegen
Roep in het Program.cs bestand van uw clientverbruikende project de AddElasticsearchClient-extensiemethode aan op elke IHostApplicationBuilder om een ElasticsearchClient
te registreren voor gebruik via de container voor afhankelijkheidsinjectie. De methode gebruikt een verbindingsnaamparameter.
builder.AddElasticsearchClient(connectionName: "elasticsearch");
Tip
De parameter connectionName
moet overeenkomen met de naam die wordt gebruikt bij het toevoegen van de Elasticsearch resource in het app-hostproject. Zie voor meer informatie Voeg Elasticsearch resourcetoe.
Vervolgens kunt u het ElasticsearchClient
exemplaar ophalen met behulp van afhankelijkheidsinjectie. Als u bijvoorbeeld de verbinding wilt ophalen uit een voorbeeldservice:
public class ExampleService(ElasticsearchClient client)
{
// Use client...
}
Sleutel-Elasticsearchclient toevoegen
Er kunnen situaties zijn waarin u meerdere ElasticsearchClient
exemplaren met verschillende verbindingsnamen wilt registreren. Als u keyed Elasticsearch clients wilt registreren, roept u de AddKeyedElasticsearchClientaan:
builder.AddKeyedElasticsearchClient(name: "products");
builder.AddKeyedElasticsearchClient(name: "orders");
Vervolgens kunt u de ElasticsearchClient
exemplaren ophalen met behulp van afhankelijkheidsinjectie. Als u bijvoorbeeld de verbinding wilt ophalen uit een voorbeeldservice:
public class ExampleService(
[FromKeyedServices("products")] ElasticsearchClient productsClient,
[FromKeyedServices("orders")] ElasticsearchClient ordersClient)
{
// Use clients...
}
Voor meer informatie over gesleutelde services, zie .NET afhankelijkheidsinjectie: Keyed Services.
Configuratie
De .NET AspireElasticsearchclient-integratie biedt meerdere opties voor het configureren van de server-verbinding op basis van de vereisten en conventies van uw project.
Een verbindingsreeks gebruiken
Wanneer u een verbindingsreeks uit de sectie ConnectionStrings
configuratie gebruikt, kunt u de naam van de verbindingsreeks opgeven bij het aanroepen van builder.AddElasticsearchClient
:
builder.AddElasticsearchClient("elasticsearch");
Vervolgens wordt de verbindingsreeks opgehaald uit de ConnectionStrings
configuratiesectie:
{
"ConnectionStrings": {
"elasticsearch": "http://elastic:password@localhost:27011"
}
}
Configuratieproviders gebruiken
De .NET AspireElasticsearchClient-integratie ondersteunt Microsoft.Extensions.Configuration. Het laadt de ElasticClientsElasticsearchSettings vanuit de configuratie met behulp van de Aspire:Elastic:Clients:Elasticsearch
-sleutel. Bekijk het volgende voorbeeld appsettings.json waarmee een aantal van de opties wordt geconfigureerd:
{
"Aspire": {
"Elastic": {
"Clients": {
"Elasticsearch": {
"DisableHealthChecks": false,
"DisableTracing": false,
"HealthCheckTimeout": "00:00:03",
"ApiKey": "<Valid ApiKey>",
"Endpoint": "http://elastic:password@localhost:27011",
"CloudId": "<Valid CloudId>"
}
}
}
}
}
Inline delegates gebruiken
U kunt de Action<ElasticClientsElasticsearchSettings> configureSettings
gedelegeerde ook doorgeven om bepaalde of alle opties inline in te stellen, bijvoorbeeld om de API-sleutel in te stellen vanuit code:
builder.AddElasticsearchClient(
"elasticsearch",
static settings =>
settings.Endpoint = new Uri("http://elastic:password@localhost:27011"));
Een CloudId
en een ApiKey
gebruiken met configuratieproviders
Wanneer u Elastic Cloud-gebruikt, kunt u de CloudId
en ApiKey
opgeven in Aspire:Elastic:Clients:Elasticsearch
sectie wanneer u builder.AddElasticsearchClient
aanroept.
builder.AddElasticsearchClient("elasticsearch");
Bekijk het volgende voorbeeld appsettings.json waarmee de opties worden geconfigureerd:
{
"Aspire": {
"Elastic": {
"Clients": {
"Elasticsearch": {
"ApiKey": "<Valid ApiKey>",
"CloudId": "<Valid CloudId>"
}
}
}
}
}
Een CloudId
en een ApiKey
gebruiken met inline gedelegeerden
builder.AddElasticsearchClient(
"elasticsearch",
static settings =>
{
settings.ApiKey = "<Valid ApiKey>";
settings.CloudId = "<Valid CloudId>";
});
Gezondheidscontroles voor Client-integratie
Standaard zijn .NET.NET Aspire integraties zo ingesteld dat ze statuscontroles voor alle diensten uitvoeren. Zie .NET.NET Aspire overzicht van integratiesvoor meer informatie.
De .NET AspireElasticsearch-integratie maakt gebruik van de geconfigureerde client om een PingAsync
uit te voeren. Als het resultaat een HTTP 200 OK is, wordt de statuscontrole als in orde beschouwd, anders is deze niet in orde. Als er een uitzondering is, wordt de statuscontrole beschouwd als ongezond, met de fout die zich verspreidt door het mislukken van de statuscontrole.
Waarneembaarheid en telemetrie
.NET .NET Aspire integraties automatisch configuraties voor loggen, tracering en metrieken instellen, die ook wel bekend staan als de pijlers van waarneembaarheid. Zie .NET.NET Aspire overzicht van integratieintegratiesvoor meer informatie over de waarneembaarheid en telemetrie van integraties. Afhankelijk van de back-upservice ondersteunen sommige integraties mogelijk slechts enkele van deze functies. Sommige integraties ondersteunen bijvoorbeeld logboekregistratie en tracering, maar geen metrische gegevens. Telemetriefuncties kunnen ook worden uitgeschakeld met behulp van de technieken die worden weergegeven in de sectie Configuratie.
Opsporing
De .NET AspireElasticsearch-integratie verzendt de volgende traceringsactiviteiten met behulp van OpenTelemetry:
Elastic.Transport