Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Incluye: Integración de alojamiento —&—
Client integración
Nota:
Esta integración forma parte del .NET.NET Aspire Community Toolkit y no es oficialmente compatible con el equipo de .NET.NET Aspire.
RavenDB es una base de datos NoSQL de código abierto de alto rendimiento diseñada para el almacenamiento de datos rápido, eficaz y escalable. Admite características avanzadas, como transacciones ACID, replicación de datos distribuidos y administración de datos de serie temporal, lo que lo convierte en una excelente opción para el desarrollo de aplicaciones modernas. La .NET Aspire integración de RavenDB permite conectarse a instancias existentes de RavenDB o crear nuevas instancias desde .NET usando la imagen de contenedor docker.io/library/ravendb.
Integración de hospedaje
La integración de hospedaje de RavenDB modeliza el servidor como de tipo RavenDBServerResource
y la base de datos como de tipo RavenDBDatabaseResource
. Para acceder a estos tipos y API, agregue el paquete NuGet CommunityToolkit📦.Aspire.Hosting.RavenDB en el proyecto host de la aplicación.
dotnet add package CommunityToolkit.Aspire.Hosting.RavenDB
Para obtener más información, consulte dotnet add package o Administrar las dependencias de paquetes en las aplicaciones .NET.
Adición de recursos de servidor de RavenDB y recurso de base de datos
Para configurar RavenDB en el proyecto host de la aplicación, llame a uno de los AddRavenDB
métodos de extensión de la builder
instancia para agregar un recurso de servidor RavenDB y, a continuación, llame a AddDatabase
en el recurso de servidor para agregar una base de datos. Este es un ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
var ravenServer = builder.AddRavenDB("ravenServer");
var ravendb = ravenServer.AddDatabase("ravendb");
builder.AddProject<Projects.ExampleProject>()
.WithReference(ravendb)
.WaitFor(ravendb);
// After adding all resources, build and run the app...
Importante
Se requiere una licencia de RavenDB válida. Si aún no tiene una, puede solicitar una licencia gratuita de community aquí.
Cuando .NET.NET Aspire agrega una imagen de contenedor al host de la aplicación, como se muestra en el ejemplo anterior con la imagen docker.io/ravendb/ravendb
, se crea una nueva instancia de RavenDB en su equipo local. Se agrega una referencia al recurso de base de datos RavenDB (la ravendb
variable) a ExampleProject
.
Para obtener más información, consulte ciclo de vida de los recursos de contenedores.
Adición de un recurso de servidor RavenDB con volumen de datos
Para agregar un volumen de datos al recurso del servidor RavenDB, llame al Aspire.Hosting.RavenDBBuilderExtensions.WithDataVolume
método en el recurso del servidor RavenDB:
var builder = DistributedApplication.CreateBuilder(args);
var ravenServer = builder.AddRavenDB("ravenServer")
.WithDataVolume();
builder.AddProject<Projects.ExampleProject>()
.WithReference(ravenServer)
.WaitFor(ravenServer);
El volumen de datos permanece disponible después de que finalice el ciclo de vida del contenedor, conservando los datos de RavenDB. El volumen de datos se monta en la /var/lib/ravendb/data
ruta de acceso del contenedor RavenDB y, cuando no se proporciona un name
parámetro, el nombre se genera aleatoriamente. Para obtener más información sobre los volúmenes de datos y los detalles sobre por qué se prefieren a bind mounts, consulte la Docker documentación: Volúmenes.
Adición de un recurso de servidor RavenDB con montaje de enlace de datos
Para agregar un montaje de vínculos de datos al recurso del servidor RavenDB, llame al método Aspire.Hosting.RavenDBBuilderExtensions.WithDataBindMount
:
var builder = DistributedApplication.CreateBuilder(args);
var ravenServer = builder.AddRavenDB("ravenServer")
.WithDataBindMount(source: @"C:\RavenDb\Data");
builder.AddProject<Projects.ExampleProject>()
.WithReference(ravenServer)
.WaitFor(ravenServer);
Importante
Los montajes de enlace de datos tienen una funcionalidad limitada en comparación con los volúmenes , que ofrecen mejor rendimiento, portabilidad y seguridad, por lo que son más apropiados para entornos de producción. Sin embargo, los bind mounts permiten el acceso directo y la modificación de archivos en el sistema host, lo que es ideal para el desarrollo y las pruebas donde se necesitan cambios en tiempo real.
Los montajes de vinculación de datos dependen del sistema de archivos del equipo anfitrión para mantener los datos de RavenDB durante los reinicios del contenedor. El montaje del enlace de datos se monta en la C:\RavenDb\Data
ruta de acceso en Windows (o /RavenDB/Data
en Unix) en la máquina host del contenedor RavenDB. Para obtener más información sobre los montajes vinculados de datos, consulte la documentación Docker: Montajes vinculados.
Adición de un recurso de servidor RavenDB protegido
Para crear una nueva instancia de RavenDB protegida mediante la configuración de un archivo desettings.json preconfigurado o un certificado autofirmado, use el RavenDBServerSettings.Secured
método o RavenDBServerSettings.SecuredWithLetsEncrypt
para las configuraciones Let's Encrypt. Estos métodos permiten especificar la dirección URL del dominio, los detalles del certificado y la configuración adicional del servidor.
Este es un ejemplo de cómo agregar un recurso de servidor RavenDB protegido mediante Let's Encrypt:
var builder = DistributedApplication.CreateBuilder(args);
var serverSettings = RavenDBServerSettings.SecuredWithLetsEncrypt(
domainUrl: "https://mycontainer.development.run",
certificatePath: "/etc/ravendb/security/cluster.server.certificate.mycontainer.pfx");
var ravendb = builder.AddRavenDB("ravenSecuredServer", serverSettings)
.WithBindMount("C:/RavenDB/Server/Security", "/etc/ravendb/security", false)
.AddDatabase("ravendbSecured");
builder.AddProject<Projects.ExampleProject>()
.WithReference(ravendb)
.WaitFor(ravendb);
Importante
Asegúrese de que la ruta de acceso al certificado sea accesible para el contenedor mediante montaje enlazado en /etc/ravendb/security
.
Comprobaciones de estado de la integración de hospedaje
La integración de hospedaje de RavenDB agrega automáticamente una comprobación de estado para el recurso del servidor RavenDB, comprobando que el servidor se está ejecutando y es accesible.
La integración de hospedaje se basa en el 📦 paquete NuGet AspNetCore.HealthChecks.RavenDB .
integración Client
Para empezar a trabajar con la .NET.NET Aspire integración del cliente de RavenDB, instale el 📦 CommunityToolkit.Aspire.RavenDB.Client paquete NuGet en el proyecto que utiliza el cliente, es decir, el proyecto de la aplicación que utiliza el cliente RavenDB. La integración de cliente de RavenDB registra una instancia de IDocumentStore , que actúa como punto de entrada para interactuar con el recurso del servidor RavenDB o una instancia de RavenDB existente. Si el host de la aplicación incluye recursos de base de datos de RavenDB, las instancias de IDocumentSession e IAsyncDocumentSession asociadas también se registran para la inserción de dependencias.
dotnet add package CommunityToolkit.Aspire.RavenDB.Client
Adición de un cliente ravenDB
En el archivo Program.cs de su proyecto que usa el cliente, invoque el método de extensión Microsoft.Extensions.Hosting.RavenDBClientExtension.AddRavenDBClient
en cualquier IHostApplicationBuilder para registrar un IDocumentStore
a utilizar mediante el contenedor de inyección de dependencias. El método toma un parámetro de nombre de conexión.
builder.AddRavenDBClient(connectionName: "ravendb");
Sugerencia
El connectionName
parámetro debe coincidir con el nombre usado al agregar el recurso del servidor RavenDB (o el recurso de base de datos, si se proporciona) en el proyecto host de la aplicación. Es decir, cuando se llama a AddDatabase
y se proporciona el nombre ravendb
, se debe usar ese mismo nombre al llamar a AddRavenDBClient
. Para obtener más información, consulte Incorporación de recursos de servidor de RavenDB y recurso de base de datos.
A continuación, puede recuperar la instancia IDocumentStore
usando la inyección de dependencias. Por ejemplo, para recuperar el cliente de un servicio de ejemplo:
public class ExampleService(IDocumentStore client)
{
// Use client...
}
Adición de un cliente ravenDB mediante RavenDBClientSettings
El AddRavenDBClient
método proporciona sobrecargas que aceptan un RavenDBClientSettings
objeto . Esto le permite usar la integración de cliente independientemente de la integración de hospedaje.
La RavenDBClientSettings
clase contiene los parámetros necesarios para establecer una conexión. Puede encontrar más detalles sobre las opciones de configuración disponibles en la sección Opciones de configuración siguiente.
Este es un ejemplo:
var settings = new RavenDBClientSettings
{
Urls = new[] { serverUrl },
DatabaseName = myDatabaseName,
Certificate = myCertificate
};
builder.AddRavenDBClient(settings: settings);
Nota:
Estos métodos son ideales para conectarse a una instancia de RavenDB existente sin depender de la integración de hospedaje. Esto resulta especialmente útil si ya tiene una instancia independiente que se ejecuta (por ejemplo, en la nube) y quiere conectarse a ella con sus detalles específicos.
Después del registro, puede recuperar la IDocumentStore
instancia y sus instancias asociadas IDocumentSession
e IAsyncDocumentSession
como se indica a continuación:
var documentStore = host.Services.GetRequiredService<IDocumentStore>();
var session = host.Services.GetRequiredService<IDocumentSession>();
var asyncSession = host.Services.GetRequiredService<IAsyncDocumentSession>();
Adición de un cliente ravenDB con clave
Si la aplicación requiere varias IDocumentStore
instancias con distintas configuraciones de conexión, puede registrar clientes de RavenDB con claves mediante el método de Microsoft.Extensions.Hosting.RavenDBClientExtension.AddKeyedRavenDBClient
extensión:
builder.AddKeyedRavenDBClient(serviceKey: "production", connectionName: "production");
builder.AddKeyedRavenDBClient(serviceKey: "testing", connectionName: "testing");
A continuación, puede recuperar las instancias de IDocumentStore
usando inyección de dependencias. Por ejemplo, para recuperar una conexión de un servicio de ejemplo:
public class ExampleService(
[FromKeyedServices("production")] IDocumentStore production,
[FromKeyedServices("testing")] IDocumentStore testing)
{
// Use databases...
}
Para obtener más información sobre los servicios con clave, consulte .NET Inserción de Dependencias: Servicios con Clave.
Configuración
La .NET Aspire integración de RavenDB Client proporciona varios enfoques y opciones de configuración para cumplir los requisitos y convenciones del proyecto.
Uso de una cadena de conexión
Al usar una cadena de conexión de la ConnectionStrings
sección de configuración, proporcione el nombre de la cadena de conexión al llamar a builder.AddRavenDBClient
:
builder.AddRavenDBClient("ravendb");
La cadena de conexión se recuperará de la ConnectionStrings
sección de configuración:
{
"ConnectionStrings": {
"ravendb": "Url=http://localhost:8080/;Database=ravendb"
}
}
Uso de proveedores de configuración
La .NET.NET Aspire integración de RavenDB admite Microsoft.Extensions.Configuration. Carga la configuración desde RavenDBClientSettings
utilizando la clave Aspire:RavenDB:Client
. Considere el ejemplo siguiente appsettings.json que configura algunas de las opciones:
{
"Aspire": {
"RavenDB": {
"Client": {
"ConnectionString": "URL=http://localhost:8080;Database=ravendb",
"DisableHealthChecks": false,
"HealthCheckTimeout": 10000,
"DisableTracing": false
}
}
}
}
Utilice configuraciones en línea
También puede pasar el delegado de Action<RavenDBClientSettings>
para configurar algunas o todas las opciones en línea.
builder.AddRavenDBClient(connectionName: "ravendb", configureSettings:
settings =>
{
settings.CreateDatabase = true;
settings.Certificate = myCertificate;
settings.DisableTracing = true;
}
Opciones de configuración
La .NET.NET Aspire integración de cliente de RavenDB proporciona opciones de configuración flexibles a través de la RavenDBClientSettings
clase , lo que le permite adaptar la conexión a los requisitos del proyecto. Estas son las propiedades clave:
Nombre | Descripción |
---|---|
Urls |
Las direcciones URL de conexión (string[] ) del clúster de RavenDB. |
DatabaseName |
Opcional. Nombre de la base de datos RavenDB a la que se va a crear o conectarse. |
CertificatePath |
Opcional. Ruta de acceso al certificado para las instancias de RavenDB protegidas. |
CertificatePassword |
Opcional. Contraseña del certificado, si es necesario. |
Certificate |
Opcional. Una instancia X509Certificate2 para instancias seguras de RavenDB. |
CreateDatabase |
Valor booleano que indica si se debe crear una nueva base de datos si aún no existe. |
ModifyDocumentStore |
Opcional. Un Action para modificar la instancia IDocumentStore . |
DisableHealthChecks |
Valor booleano que indica si la comprobación de estado de la base de datos está deshabilitada o no. |
HealthCheckTimeout |
Valor int? que indica el tiempo de espera de comprobación de estado de RavenDB en milisegundos. |
DisableTracing |
Valor booleano que indica si el seguimiento de OpenTelemetry está deshabilitado o no. |
Client verificaciones de estado de la integración
La .NET.NET Aspire integración del cliente de RavenDB utiliza el cliente configurado para llevar a cabo un IsHealthyAsync
. Si el resultado es true
, la verificación de salud se considera saludable; de lo contrario, se considera no saludable. Del mismo modo, si hay una excepción, la comprobación de estado se considera no saludable y el error se propaga debido al fallo en la comprobación de estado.