.NET Aspire MongoDB database-integratie
omvat:integratie van hosting en
Client integratie
MongoDB is een NoSQL-database die hoge prestaties, hoge beschikbaarheid en eenvoudige schaalbaarheid biedt. Met de .NET AspireMongoDB-integratie kunt u verbinding maken met bestaande MongoDB exemplaren (inclusief MongoDB Atlas) of nieuwe exemplaren maken vanuit .NET met de docker.io/library/mongo
containerinstallatiekopieën
Hostingintegratie
De MongoDB-server die als host fungeert voor integratiemodellen de server als het MongoDBServerResource type en de database als het MongoDBDatabaseResource type. Als u toegang wilt krijgen tot deze typen en API's, voegt u het 📦Aspire.Hosting.MongoDB NuGet-pakket toe in het app-hostproject.
dotnet add package Aspire.Hosting.MongoDB
Zie dotnet pakket toevoegen of Pakketafhankelijkheden beheren in .NET toepassingenvoor meer informatie.
MongoDB serverresource en databaseresource toevoegen
Roep in uw app-host-project AddMongoDB aan om een MongoDB server-resource-bouwer toe te voegen en te retourneren. Koppel een aanroep aan de geretourneerde resourcebouwer bij AddDatabaseom een databaseresource MongoDB toe te voegen.
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...
Notitie
De MongoDB container kan traag opstarten, dus kunt u het beste een persistente levensduur gebruiken om onnodige herstarts te voorkomen. Zie Levensduur van containerresourcesvoor meer informatie.
Wanneer .NET.NET Aspire een containerinstallatiekopie toevoegt aan de app-host, zoals wordt weergegeven in het vorige voorbeeld met de docker.io/library/mongo
-installatiekopie, wordt er een nieuw MongoDB exemplaar op uw lokale computer gemaakt. Een verwijzing naar de server-resourcebouwer MongoDB (de variabele mongo
) wordt gebruikt om een database toe te voegen. De database heeft de naam mongodb
en wordt vervolgens toegevoegd aan de ExampleProject
. De MongoDB-server-resource bevat standaard-inloggegevens.
-
MONGO_INITDB_ROOT_USERNAME
: een waarde vanadmin
. -
MONGO_INITDB_ROOT_PASSWORD
: Willekeurigepassword
gegenereerd met behulp van de methode CreateDefaultPasswordParameter.
Wanneer de app-host draait, wordt het wachtwoord opgeslagen in de geheime opslag van de app-host. Deze wordt toegevoegd aan de sectie Parameters
, bijvoorbeeld:
{
"Parameters:mongo-password": "<THE_GENERATED_PASSWORD>"
}
De naam van de parameter is mongo-password
, maar eigenlijk is het alleen het opmaken van de resourcenaam met een -password
achtervoegsel. Zie Veilige opslag van app-geheimen in ASP.NET Core en MongoDB serverresource toevoegen met parametersvoor meer informatie.
De methode WithReference configureert een verbinding in de ExampleProject
met de naam mongodb
en de WaitFor geeft de app-host opdracht om de afhankelijke service pas te starten als de mongodb
resource gereed is.
Tip
Als u liever verbinding wilt maken met een bestaande MongoDB-server, roept u in plaats daarvan AddConnectionString aan. Raadpleeg Bestaande bronnenvoor meer informatie.
MongoDB serverresource toevoegen met gegevensvolume
Als u een gegevensvolume wilt toevoegen aan de MongoDB serverresource, roept u de WithDataVolume methode aan op de MongoDB serverresource:
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...
Het gegevensvolume wordt gebruikt om de MongoDB servergegevens buiten de levenscyclus van de container te behouden. Het gegevensvolume wordt gekoppeld aan het /data/db
pad in de MongoDB servercontainer en wanneer er geen name
parameter wordt opgegeven, wordt de naam willekeurig gegenereerd. Zie Dockervoor meer informatie over datavolumes en waarom zij de voorkeur krijgen boven bind-mounts.
Waarschuwing
Het wachtwoord wordt opgeslagen in het gegevensvolume. Wanneer u een gegevensvolume gebruikt en als het wachtwoord wordt gewijzigd, werkt het pas als u het volume verwijdert.
MongoDB serverresource toevoegen met koppeling van gegevensbinding
Als u een gegevensbindingskoppeling wilt toevoegen aan de MongoDB-serverresource, roept u de methode WithDataBindMount aan:
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...
Belangrijk
Gegevens koppelpunten hebben beperkte functionaliteit vergeleken met volumes, die betere prestaties, draagbaarheid en beveiliging bieden, waardoor ze meer geschikt zijn voor productieomgevingen. "Bind mounts bieden echter directe toegang tot en wijziging van bestanden op het hostsysteem, ideaal voor ontwikkeling en testen waar wijzigingen in real-time nodig zijn."
Gegevensbind-mounts zijn afhankelijk van het bestandssysteem van de hostcomputer om de MongoDB servergegevens bij het herstarten van containers te behouden. De koppeling voor gegevensbinding wordt gekoppeld aan de C:\MongoDB\Data
in Windows (of /MongoDB/Data
op Unix) op de hostcomputer in de MongoDB servercontainer. Zie Docker docs: Bindingskoppelingenvoor meer informatie over koppelingskoppelingen voor gegevens.
MongoDB server resource toevoegen met koppeling voor het binden van initialisatiegegevens
Als u een bindmount van initialisatiemapgegevens aan de MongoDB-serverresource wilt toevoegen, roept u de WithInitBindMount-methode aan.
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...
Het koppelingspunt voor initialisatiegegevens wordt gebruikt om de MongoDB-server met gegevens te initialiseren. De bindmount voor de initialisatiegegevens is gemonteerd bij de C:\MongoDB\Init
op Windows (of /MongoDB/Init
op Unix) in de hostmachine binnen de MongoDB servercontainer en wordt toegewezen aan het /docker-entrypoint-initdb.d
pad in de MongoDB servercontainer.
MongoDB voert de scripts uit die in deze map zijn gevonden. Dit is handig voor het laden van gegevens in de database.
MongoDB serverresource toevoegen met parameters
Wanneer u expliciet het wachtwoord wilt opgeven dat wordt gebruikt door de container-afbeelding, kunt u deze inloggegevens opgeven als parameters. Bekijk het volgende alternatieve voorbeeld:
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...
Zie Externe parametersvoor meer informatie over het opgeven van parameters.
MongoDB Express-resource toevoegen
MongoDB Express is een webgebaseerde beheerders gebruikersinterface voor MongoDB. Als u een MongoDB Express-resource wilt toevoegen die overeenkomt met de docker.io/library/mongo-express
containerimage, roep dan de WithMongoExpress-methode aan op de MongoDB-serverresource.
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...
Tip
Om de hostpoort voor de MongoExpressContainerResource-keten te configureren, roept u de WithHostPort-API aan en geeft u het gewenste poortnummer op.
Met de voorgaande code wordt een MongoDB Express-resource toegevoegd die is geconfigureerd om verbinding te maken met de MongoDB serverresource. De standaard inloggegevens zijn:
-
ME_CONFIG_MONGODB_SERVER
: de naam die is toegewezen aan de bovenliggendeMongoDBServerResource
, in dit geval zou ditmongo
zijn. -
ME_CONFIG_BASICAUTH
: een waarde vanfalse
. -
ME_CONFIG_MONGODB_PORT
: Toegekend aan de doelpoort van het primaire eindpunt van de moederMongoDBServerResource
. -
ME_CONFIG_MONGODB_ADMINUSERNAME
: Dezelfde gebruikersnaam als geconfigureerd in de bovenliggendeMongoDBServerResource
. -
ME_CONFIG_MONGODB_ADMINPASSWORD
: hetzelfde wachtwoord als geconfigureerd in de bovenliggendeMongoDBServerResource
.
Bovendien bevat de WithMongoExpress
-API een optionele configureContainer
parameter van het type Action<IResourceBuilder<MongoExpressContainerResource>>
dat u gebruikt om de MongoDB Express-containerresource te configureren.
Gezondheidscontroles voor hostingintegratie
De MongoDB hostingintegratie voegt automatisch een statuscontrole toe voor de MongoDB serverresource. De gezondheidscontrole controleert of de MongoDB-serverresource in werking is en of er een verbinding tot stand kan worden gebracht.
De hostingintegratie is afhankelijk van het 📦 AspNetCore.HealthChecks.MongoDb NuGet-pakket.
integratie van Client
Om aan de slag te gaan met de .NET AspireMongoDB-clientintegratie, installeer het 📦AspireMongoDB-Driver NuGet-pakket in het project dat door de applicatie wordt gebruikt en van de MongoDB-client gebruikmaakt. De MongoDB-clientintegratie registreert een IMongoClient exemplaar dat u kunt gebruiken om te communiceren met de MongoDB-serverresource. Als uw app-host MongoDB databaseresources toevoegt, wordt de IMongoDatabase-instantie ook geregistreerd.
dotnet add package Aspire.MongoDB.Driver
MongoDB-client toevoegen
Roep in het Program.cs bestand van het clientgebruikte project de AddMongoDBClient-extensiemethode aan op een IHostApplicationBuilder om een IMongoClient
te registreren voor gebruik via de container voor afhankelijkheidsinjectie. De methode gebruikt een verbindingsnaamparameter.
builder.AddMongoDBClient(connectionName: "mongodb");
Tip
De parameter connectionName
moet overeenkomen met de naam die wordt gebruikt bij het toevoegen van de MongoDB serverresource (of de databaseresource wanneer deze is opgegeven) in het app-hostproject. Met andere woorden, wanneer u AddDatabase
aanroept en een naam opgeeft van mongodb
diezelfde naam moet worden gebruikt bij het aanroepen van AddMongoDBClient
. Voor meer informatie, zie server-resource en database-resource toevoegen MongoDB.
Vervolgens kunt u het IMongoClient
exemplaar ophalen met behulp van afhankelijkheidsinjectie. Als u bijvoorbeeld de client wilt ophalen uit een voorbeeldservice:
public class ExampleService(IMongoClient client)
{
// Use client...
}
De IMongoClient
wordt gebruikt om te communiceren met de MongoDB serverresource. Het kan worden gebruikt om databases te maken die nog niet bekend zijn bij het app-hostproject. Wanneer u een MongoDB databaseresource in uw app-host definieert, kunt u in plaats daarvan vereisen dat de container voor afhankelijkheidsinjectie een IMongoDatabase
exemplaar biedt. Voor meer informatie over afhankelijkheidsinjectie, zie .NET afhankelijkheidsinjectie.
Keyed MongoDB-client toevoegen
Er kunnen situaties zijn waarin u meerdere IMongoDatabase
exemplaren met verschillende verbindingsnamen wilt registreren. Als u keyed MongoDB-clients wilt registreren, roept u de methode AddKeyedMongoDBClient aan:
builder.AddKeyedMongoDBClient(name: "mainDb");
builder.AddKeyedMongoDBClient(name: "loggingDb");
Belangrijk
Wanneer u sleutelservices gebruikt, wordt verwacht dat uw MongoDB resource twee benoemde databases heeft geconfigureerd, één voor de mainDb
en één voor de loggingDb
.
Vervolgens kunt u de IMongoDatabase
exemplaren ophalen met behulp van afhankelijkheidsinjectie. Als u bijvoorbeeld de verbinding wilt ophalen uit een voorbeeldservice:
public class ExampleService(
[FromKeyedServices("mainDb")] IMongoDatabase mainDatabase,
[FromKeyedServices("loggingDb")] IMongoDatabase loggingDatabase)
{
// Use databases...
}
Voor meer informatie over gesleutelde services, zie .NET afhankelijkheidsinjectie: gesleutelde services.
Configuratie
De .NET AspireMongoDB-databaseintegratie biedt meerdere configuratiemethoden en opties om te voldoen aan 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.AddMongoDBClient()
:
builder.AddMongoDBClient("mongo");
De verbindingsreeks wordt opgehaald uit de sectie ConnectionStrings
configuratie. Bekijk het volgende MongoDB voorbeeld van JSON configuratie:
{
"ConnectionStrings": {
"mongo": "mongodb://server:port/test",
}
}
U kunt ook het volgende MongoDB Atlas-voorbeeld JSON configuratie overwegen:
{
"ConnectionStrings": {
"mongo": "mongodb+srv://username:password@server.mongodb.net/",
}
}
Zie MongoDB: ConnectionString-documentatievoor meer informatie over het opmaken van deze verbindingsreeks.
Configuratieproviders gebruiken
De .NET AspireMongoDB-integratie ondersteunt Microsoft.Extensions.Configuration. Het laadt de MongoDBSettings vanuit de configuratie met behulp van de Aspire:MongoDB:Driver
-sleutel. Het volgende codefragment is een voorbeeld van een appsettings.json-bestand waarmee een aantal van de opties wordt geconfigureerd:
{
"Aspire": {
"MongoDB": {
"Driver": {
"ConnectionString": "mongodb://server:port/test",
"DisableHealthChecks": false,
"HealthCheckTimeout": 10000,
"DisableTracing": false
},
}
}
Inlineconfiguraties gebruiken
U kunt de Action<MongoDBSettings>
delegate ook doorgeven om bepaalde of alle opties in-line in te stellen:
builder.AddMongoDBClient("mongodb",
static settings => settings.ConnectionString = "mongodb://server:port/test");
Configuratieopties
Dit zijn de configureerbare opties met bijbehorende standaardwaarden:
Naam | Beschrijving |
---|---|
ConnectionString |
De verbindingsreeks van de MongoDB databasedatabase waarmee verbinding moet worden gemaakt. |
DisableHealthChecks |
Een Booleaanse waarde die aangeeft of de databasestatuscontrole is uitgeschakeld of niet. |
HealthCheckTimeout |
Een int? waarde die de time-out voor de MongoDB statuscontrole in milliseconden aangeeft. |
DisableTracing |
Een booleaanse waarde die aangeeft of de OpenTelemetry tracering is uitgeschakeld of niet. |
Gezondheidscontroles
Standaard kunnen .NET.NET Aspire integraties statuscontroles voor alle services inschakelen. Zie .NET.NET Aspire overzicht van integratiesvoor meer informatie.
De .NET AspireMongoDB clientintegratie verwerkt standaard de volgende scenario's:
- Voegt een gezondheidscontrole toe die, wanneer ingeschakeld, controleert of een verbinding tot stand kan worden gebracht en commando's binnen een bepaalde tijd kunnen worden uitgevoerd tegen de MongoDB-database.
- Integreert met het
/health
HTTP-eindpunt, waarbij alle geregistreerde gezondheidscontroles moeten slagen zodat de app als gereed wordt beschouwd voor het accepteren van verkeer.
Waarneembaarheid en telemetrie
.NET .NET Aspire integraties stellen automatisch configuraties in voor logging, tracing en metrics, die soms 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.
Loggen
De .NET AspireMongoDB-databaseintegratie maakt gebruik van standaard .NET logboekregistratie en u ziet logboekvermeldingen uit de volgende categorieën:
-
MongoDB[.*]
: logboekvermeldingen uit de MongoDB naamruimte.
Opsporen
De integratie van de .NET AspireMongoDB database verzendt de volgende traceringsactiviteiten met behulp van OpenTelemetry:
MongoDB.Driver.Core.Extensions.DiagnosticSources
Statistieken
De .NET AspireMongoDB-databaseintegratie bevat momenteel geen OpenTelemetry metrische gegevens.