.NET Aspire MongoDB Datenbankintegration
umfasst:Hostingintegration und Client Integration
MongoDB ist eine NoSQL-Datenbank, die hohe Leistung, hohe Verfügbarkeit und einfache Skalierbarkeit bietet. Mit der .NET AspireMongoDB-Integration können Sie eine Verbindung mit vorhandenen MongoDB-Instanzen (einschließlich MongoDB Atlas) herstellen oder neue Instanzen aus .NET mit dem docker.io/library/mongo
Container-Image erstellen.
Hosting-Integration
Die MongoDB-Servermodellierung stellt den Server als MongoDBServerResource-Typ und die Datenbank als MongoDBDatabaseResource-Typ dar. Um auf diese Typen und APIs zuzugreifen, fügen Sie das NuGet-Paket 📦Aspire.Hosting.MongoDB im App-Host Projekt hinzu.
dotnet add package Aspire.Hosting.MongoDB
Weitere Informationen finden Sie unter dotnet add package oder Verwalten Sie Paketabhängigkeiten in .NET Anwendungen.
Hinzufügen MongoDB Serverressource und Datenbankressource
Rufen Sie in Ihrem App-Hostprojekt AddMongoDB auf, um einen MongoDB Serverressourcen-Generator hinzuzufügen und zurückzugeben. Verketten Sie einen Aufruf des zurückgegebenen Ressourcen-Generators an AddDatabase, um eine MongoDB Datenbankressource hinzuzufügen.
var builder = DistributedApplication.CreateBuilder(args);
var mongo = builder.AddMongoDB("mongo")
.WithLifetime(ContainerLifetime.Persistent);
var mongodb = mongo.AddDatabase("mongodb");
builder.AddProject<Projects.ExampleProject>()
.WithReference(mongodb)
.WaitFor(mongodb);
// After adding all resources, run the app...
Anmerkung
Der MongoDB Container kann langsam gestartet werden, daher ist es am besten, eine persistente Lebensdauer zu verwenden, um unnötige Neustarts zu vermeiden. Weitere Informationen finden Sie unter Lebensdauer von Containerressourcen.
Wenn .NET.NET Aspire dem App-Host ein Containerimage hinzufügt, wie im vorherigen Beispiel mit dem docker.io/library/mongo
-Image gezeigt, wird eine neue MongoDB Instanz auf dem lokalen Computer erstellt. Ein Verweis auf den MongoDB Serverressourcen-Generator (die mongo
Variable) wird verwendet, um eine Datenbank hinzuzufügen. Die Datenbank wird mongodb
benannt und dann dem ExampleProject
hinzugefügt. Die MongoDB Serverressource enthält Standardanmeldeinformationen:
-
MONGO_INITDB_ROOT_USERNAME
: Ein Wert vonadmin
. -
MONGO_INITDB_ROOT_PASSWORD
: Zufälligepassword
mithilfe der CreateDefaultPasswordParameter-Methode generiert.
Wenn der App-Host ausgeführt wird, wird das Kennwort im geheimen Speicher des App-Hosts gespeichert. Sie wird dem Abschnitt Parameters
hinzugefügt, z. B.:
{
"Parameters:mongo-password": "<THE_GENERATED_PASSWORD>"
}
Der Name des Parameters ist mongo-password
, aber eigentlich wird der Ressourcenname nur mit dem Suffix -password
formatiert. Weitere Informationen finden Sie unter Sichere Speicherung von App-Geheimnissen in der Entwicklung in ASP.NET Core und Serverressource MongoDB mit Parameternhinzufügen.
Die Methode WithReference konfiguriert eine Verbindung in der mit dem Namen ExampleProject
ausgestatteten mongodb
, und die WaitFor weist den Anwendungs-Host an, den abhängigen Dienst erst zu starten, wenn die Ressource mongodb
bereit ist.
Trinkgeld
Wenn Sie lieber eine Verbindung mit einem vorhandenen MongoDB Server herstellen möchten, rufen Sie stattdessen AddConnectionString auf. Weitere Informationen finden Sie unter Referenzieren vorhandener Ressourcen.
Hinzufügen MongoDB Serverressource mit Datenvolume
Um der MongoDB Serverressource ein Datenvolume hinzuzufügen, rufen Sie die WithDataVolume Methode für die MongoDB Serverressource auf:
var builder = DistributedApplication.CreateBuilder(args);
var mongo = builder.AddMongoDB("mongo")
.WithDataVolume();
var mongodb = mongo.AddDatabase("mongodb");
builder.AddProject<Projects.ExampleProject>()
.WithReference(mongodb)
.WaitFor(mongodb);
// After adding all resources, run the app...
Das Datenvolume wird verwendet, um die MongoDB Serverdaten außerhalb des Lebenszyklus des Containers zu speichern. Das Datenvolume wird am /data/db
Pfad im MongoDB Servercontainer bereitgestellt und wenn kein name
Parameter angegeben wird, wird der Name zufällig generiert. Weitere Informationen zu Datenvolumes und Details dazu, warum sie gegenüber Bind-Mountsbevorzugt werden, finden Sie in der Docker-Dokumentation: Volumes.
Warnung
Das Kennwort wird im Datenvolume gespeichert. Wenn Sie ein Datenvolumen verwenden und sich das Kennwort ändert, funktioniert es nicht, bis Sie das Volumen löschen.
Hinzufügen der MongoDB-Serverressource mit Daten-Bindemontage
Rufen Sie die WithDataBindMount-Methode auf, um ein Datenbindemount zur MongoDB-Serverressource hinzuzufügen.
var builder = DistributedApplication.CreateBuilder(args);
var mongo = builder.AddMongoDB("mongo")
.WithDataBindMount(@"C:\MongoDB\Data");
var mongodb = mongo.AddDatabase("mongodb");
builder.AddProject<Projects.ExampleProject>()
.WithReference(mongodb)
.WaitFor(mongodb);
// After adding all resources, run the app...
Wichtig
Daten Binden von Bereitstellungen mit eingeschränkter Funktionalität im Vergleich zu Volumes, die eine bessere Leistung, Portabilität und Sicherheit bieten, wodurch sie für Produktionsumgebungen besser geeignet sind. Bind-Mounts ermöglichen jedoch direkten Zugriff und Bearbeitung von Dateien auf dem Hostsystem, ideal für die Entwicklung und Tests, bei denen Echtzeitänderungen erforderlich sind.
Datenbindungs-Bereitstellungen basieren auf dem Dateisystem des Hostcomputers, um die MongoDB Serverdaten über Containerneustarts hinweg beizubehalten. Die Daten-Bind-Mount ist bei C:\MongoDB\Data
unter Windows (oder bei /MongoDB/Data
auf Unix) auf dem Host-Rechner im MongoDB Server-Container eingehängt. Weitere Informationen zu Daten-Bind-Mounts finden Sie unter Docker Dokumentation: Bind-Mounts.
Hinzufügen der Serverressource MongoDB mit Initialisierungsdaten-Bindemontage
Rufen Sie die WithInitBindMount-Methode auf, um eine Initialisierungsordner-Datenbindung zu der MongoDB-Serverressource hinzuzufügen.
var builder = DistributedApplication.CreateBuilder(args);
var mongo = builder.AddMongoDB("mongo")
.WithInitBindMount(@"C:\MongoDB\Init");
var mongodb = mongo.AddDatabase("mongodb");
builder.AddProject<Projects.ExampleProject>()
.WithReference(mongodb)
.WaitFor(mongodb);
// After adding all resources, run the app...
Der Initialisierungsdaten-Bind-Mount dient dazu, den MongoDB-Server mit Daten zu initialisieren. Die Initialisierungsdaten-Bindung wird auf dem C:\MongoDB\Init
unter Windows (oder /MongoDB/Init
auf Unix) auf dem Hostcomputer im MongoDB-Servercontainer eingehängt und entspricht dem /docker-entrypoint-initdb.d
-Pfad im MongoDB-Servercontainer.
MongoDB führt die in diesem Ordner gefundenen Skripts aus, was zum Laden von Daten in die Datenbank nützlich ist.
Fügen Sie MongoDB Server-Ressource mit Parametern hinzu
Wenn Sie das vom Container-Image verwendete Kennwort explizit angeben möchten, können Sie die Zugangsdaten als Parameter übergeben. Betrachten Sie das folgende alternative Beispiel:
var builder = DistributedApplication.CreateBuilder(args);
var username = builder.AddParameter("username");
var password = builder.AddParameter("password", secret: true);
var mongo = builder.AddMongoDB("mongo", username, password);
var mongodb = mongo.AddDatabase("mongodb");
builder.AddProject<Projects.ExampleProject>()
.WithReference(mongodb)
.WaitFor(mongodb);
// After adding all resources, run the app...
Weitere Informationen zum Bereitstellen von Parametern finden Sie unter externe Parameter.
Ressource MongoDB Express hinzufügen
MongoDB Express ist eine webbasierte MongoDB Administratorbenutzeroberfläche. Um eine MongoDB Express-Ressource hinzuzufügen, die dem docker.io/library/mongo-express
Containerimageentspricht, rufen Sie die WithMongoExpress-Methode für die MongoDB Serverressource auf:
var builder = DistributedApplication.CreateBuilder(args);
var mongo = builder.AddMongoDB("mongo")
.WithMongoExpress();
var mongodb = mongo.AddDatabase("mongodb");
builder.AddProject<Projects.ExampleProject>()
.WithReference(mongodb)
.WaitFor(mongodb);
// After adding all resources, run the app...
Trinkgeld
Führen Sie zur Konfiguration des Hostports für die MongoExpressContainerResource-Kette einen Aufruf an die WithHostPort-API durch und geben Sie die gewünschte Portnummer an.
Der vorangehende Code fügt eine MongoDB Express-Ressource hinzu, die für die Verbindung mit der MongoDB Serverressource konfiguriert ist. Die Standardanmeldeinformationen sind:
-
ME_CONFIG_MONGODB_SERVER
: Der Name, der dem übergeordnetenMongoDBServerResource
zugewiesen ist, wäre in diesem Fallmongo
. -
ME_CONFIG_BASICAUTH
: Ein Wert vonfalse
. -
ME_CONFIG_MONGODB_PORT
: Vom Zielport des primären Endpunkts des übergeordnetenMongoDBServerResource
zugewiesen. -
ME_CONFIG_MONGODB_ADMINUSERNAME
: Derselbe Benutzername wie im übergeordnetenMongoDBServerResource
konfiguriert. -
ME_CONFIG_MONGODB_ADMINPASSWORD
: Dasselbe Kennwort, wie es im übergeordnetenMongoDBServerResource
konfiguriert ist.
Darüber hinaus macht die WithMongoExpress
-API einen optionalen configureContainer
Parameter vom Typ Action<IResourceBuilder<MongoExpressContainerResource>>
verfügbar, den Sie zum Konfigurieren der MongoDB Express-Containerressource verwenden.
Hosten von Integritätsprüfungen für Integration
Die MongoDB Hostingintegration fügt automatisch eine Integritätsprüfung für die MongoDB Serverressource hinzu. Die Gesundheitsprüfung überprüft, ob die MongoDB Serverressource ausgeführt wird und ob eine Verbindung hergestellt werden kann.
Die Hostingintegration basiert auf dem 📦 AspNetCore.HealthChecks.MongoDb NuGet-Paket.
Client integration
Um mit der .NET AspireMongoDB-Clientintegration zu beginnen, installieren Sie das 📦Aspire.MongoDB.Driver NuGet-Paket im clientnutzenden Projekt, das heißt, dem Projekt für die Anwendung, die den MongoDB-Client verwendet. Die MongoDB Clientintegration registriert eine IMongoClient- Instanz, die Sie für die Interaktion mit der MongoDB Serverressource verwenden können. Wenn dein App-Host MongoDB Datenbankressourcen hinzufügt, wird auch die IMongoDatabase Instanz registriert.
dotnet add package Aspire.MongoDB.Driver
Hinzufügen des MongoDB-Kunden
Rufen Sie in der Program.cs Datei Ihres clientnutzenden Projekts die AddMongoDBClient Erweiterungsmethode an jedem IHostApplicationBuilder auf, um eine IMongoClient
zur Verwendung mit dem Abhängigkeitsinjektionscontainer zu registrieren. Die Methode verwendet einen Verbindungsnamenparameter.
builder.AddMongoDBClient(connectionName: "mongodb");
Trinkgeld
Der parameter connectionName
muss mit dem Namen übereinstimmen, der beim Hinzufügen der MongoDB Serverressource (oder der Datenbankressource, sofern angegeben) im App-Hostprojekt verwendet wird. Mit anderen Worten, wenn Sie AddDatabase
aufrufen und einen Namen von mongodb
angeben, sollte genau dieser Name beim Aufrufen von AddMongoDBClient
verwendet werden. Weitere Informationen finden Sie unter Hinzufügen von MongoDB der Serverressource und der Datenbankressource.
Anschließend können Sie die IMongoClient
Instanz mithilfe der Abhängigkeitseinfügung abrufen. So rufen Sie beispielsweise den Client aus einem Beispieldienst ab:
public class ExampleService(IMongoClient client)
{
// Use client...
}
Die IMongoClient
wird verwendet, um mit der MongoDB Serverressource zu interagieren. Es kann verwendet werden, um Datenbanken zu erstellen, die dem App-Hostprojekt noch nicht bekannt sind. Wenn Sie eine MongoDB-Datenbankressource in Ihrem App-Host definieren, können Sie stattdessen erfordern, dass der Container zum Einfügen von Abhängigkeiten eine IMongoDatabase
Instanz bereitstellt. Weitere Informationen zur Abhängigkeitsinjektion finden Sie unter .NET Abhängigkeitsinjektion.
Hinzufügen des Schlüssel-Clients MongoDB
Es kann Situationen geben, in denen Sie mehrere IMongoDatabase
Instanzen mit unterschiedlichen Verbindungsnamen registrieren möchten. Rufen Sie die MongoDB-Methode auf, um AddKeyedMongoDBClient-Clients mit Schlüssel zu registrieren.
builder.AddKeyedMongoDBClient(name: "mainDb");
builder.AddKeyedMongoDBClient(name: "loggingDb");
Wichtig
Bei der Verwendung von Schlüsseldiensten wird erwartet, dass Ihre MongoDB Ressource zwei benannte Datenbanken konfiguriert hat, eine für die mainDb
und eine für die loggingDb
.
Anschließend können Sie mithilfe der Dependency Injection die IMongoDatabase
Instanzen abrufen. So rufen Sie beispielsweise die Verbindung aus einem Beispieldienst ab:
public class ExampleService(
[FromKeyedServices("mainDb")] IMongoDatabase mainDatabase,
[FromKeyedServices("loggingDb")] IMongoDatabase loggingDatabase)
{
// Use databases...
}
Weitere Informationen zu schlüsselbasierten Diensten finden Sie unter .NET Abhängigkeitsinjektion: schlüsselbasierte Dienste.
Konfiguration
Die .NET AspireMongoDB Datenbankintegration bietet mehrere Konfigurationsmethoden und Optionen, um die Anforderungen und Konventionen Ihres Projekts zu erfüllen.
Verwenden einer Verbindungszeichenfolge
Wenn Sie eine Verbindungszeichenfolge aus dem Konfigurationsabschnitt ConnectionStrings
verwenden, können Sie beim Aufrufen von builder.AddMongoDBClient()
den Namen der Verbindungszeichenfolge angeben:
builder.AddMongoDBClient("mongo");
Aus dem Konfigurationsabschnitt ConnectionStrings
wird die Verbindungszeichenfolge abgerufen. Betrachten Sie das folgende MongoDB Beispiel JSON Konfiguration:
{
"ConnectionStrings": {
"mongo": "mongodb://server:port/test",
}
}
Betrachten Sie alternativ die folgende MongoDB Atlas-Beispielkonfiguration JSON.
{
"ConnectionStrings": {
"mongo": "mongodb+srv://username:password@server.mongodb.net/",
}
}
Weitere Informationen zum Formatieren dieser Verbindungszeichenfolge finden Sie unter MongoDB: ConnectionString-Dokumentation.
Verwenden Sie Konfigurationsanbieter
Die .NET Aspire-MongoDB-Integration unterstützt Microsoft.Extensions.Configuration. Sie lädt die MongoDBSettings mithilfe des Aspire:MongoDB:Driver
Schlüssels aus der Konfiguration. Der folgende Codeausschnitt ist ein Beispiel für eine appsettings.json Datei, die einige der Optionen konfiguriert:
{
"Aspire": {
"MongoDB": {
"Driver": {
"ConnectionString": "mongodb://server:port/test",
"DisableHealthChecks": false,
"HealthCheckTimeout": 10000,
"DisableTracing": false
},
}
}
Verwenden Sie Inlinekonfigurationen
Sie können auch den Action<MongoDBSettings>
Delegat übergeben, um einige oder alle Optionen inline einzurichten:
builder.AddMongoDBClient("mongodb",
static settings => settings.ConnectionString = "mongodb://server:port/test");
Konfigurationsoptionen
Hier sind die konfigurierbaren Optionen mit entsprechenden Standardwerten:
Name | Beschreibung |
---|---|
ConnectionString |
Die Verbindungszeichenfolge der MongoDB-Datenbank, mit der eine Verbindung hergestellt werden soll. |
DisableHealthChecks |
Ein boolescher Wert, der angibt, ob die Datenbankintegritätsprüfung deaktiviert ist oder nicht. |
HealthCheckTimeout |
Ein int? Wert, der das Timeout der MongoDB Gesundheitsprüfung in Millisekunden angibt. |
DisableTracing |
Ein boolescher Wert, der angibt, ob die OpenTelemetry Ablaufverfolgung deaktiviert ist oder nicht. |
Gesundheitsprüfungen
Standardmäßig aktivieren .NET.NET Aspire Integrationen Integritätsprüfungen für alle Dienste. Weitere Informationen finden Sie unter .NET.NET Aspire Integrationsübersicht.
Standardmäßig behandelt die .NET AspireMongoDB Clientintegration die folgenden Szenarien:
- Fügt eine Integritätsprüfung hinzu, die bei Aktivierung überprüft, ob eine Verbindung hergestellt und Befehle innerhalb einer bestimmten Zeitspanne gegen die MongoDB-Datenbank ausgeführt werden können.
- Wird in den
/health
HTTP-Endpunkt integriert, der angibt, dass alle registrierten Gesundheitsprüfungen bestehen müssen, damit die App als bereit zur Annahme von Datenverkehr gilt.
Observability und Telemetrie
.NET .NET Aspire Integrationen richten automatisch Protokollierungs-, Ablaufverfolgungs- und Metrikkonfigurationen ein, die manchmal als den Säulen der Observabilitybezeichnet werden. Weitere Informationen zur Integrations-Observability und Telemetrie finden Sie unter .NET.NET Aspire Integrationsübersicht. Abhängig vom unterstützenden Dienst unterstützen Integrationen möglicherweise nur bestimmte dieser Features. Beispielsweise unterstützen einige Integrationen Protokollierung und Ablaufverfolgung, aber keine Metriken. Telemetrie-Funktionen können auch mithilfe der Techniken deaktiviert werden, die im Abschnitt Configuration beschrieben werden.
Protokollierung
Die .NET AspireMongoDB-Datenbankintegration verwendet die Protokollierung nach dem Standard .NET, wobei Protokolleinträge aus den folgenden Kategorien angezeigt werden:
-
MongoDB[.*]
: Alle Protokolleinträge aus dem MongoDB Namespace.
Nachverfolgung
Die .NET AspireMongoDB Datenbankintegration gibt die folgenden Tracing-Aktivitäten mithilfe von OpenTelemetryaus.
MongoDB.Driver.Core.Extensions.DiagnosticSources
Metriken
Die .NET AspireMongoDB Datenbankintegration macht derzeit keine OpenTelemetry Metriken verfügbar.