Delen via


.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 MongoDBserver-hostingintegratie modelleert 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 server bron en databron toevoegen

Roep in uw app-hostproject AddMongoDB aan om een MongoDBserver resourcebouwer 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 uw MongoDBserver resource builder (de mongo-variabele) wordt gebruikt om een database toe te voegen. De database heeft de naam mongodb en wordt vervolgens toegevoegd aan de ExampleProject. De MongoDBserver-resource bevat standaard inloggegevens.

  • MONGO_INITDB_ROOT_USERNAME: een waarde van admin.
  • MONGO_INITDB_ROOT_PASSWORD: Willekeurige password 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 voor meer informatie Veilige opslag van app-geheimen in ontwikkeling in ASP.NET Core en MongoDBserver-resource toevoegen met parameters.

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 MongoDBserver, roept u in plaats daarvan AddConnectionString aan. Raadpleeg Bestaande bronnenvoor meer informatie.

Een MongoDBserver-resource toevoegen met gegevensvolume

Als u een gegevensvolume wilt toevoegen aan de MongoDBserver-resource, roept u de WithDataVolume methode aan voor de MongoDBserver-resource:

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 MongoDBserver gegevens buiten de levenscyclus van de container te behouden. Het gegevensvolume wordt gekoppeld aan het /data/db pad in de MongoDBserver container en wanneer er geen name parameter wordt opgegeven, wordt de naam willekeurig gegenereerd. Zie Docker docs: Volumesvoor 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 server resource toevoegen met koppeling voor gegevensbinding

Als u een koppeling voor gegevensbinding wilt toevoegen aan de MongoDBserver-resource, 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."

Gegevensbindingen zijn afhankelijk van het bestandssysteem van de hostmachine om de MongoDBserver gegevens na het opnieuw opstarten van de container te behouden. De koppeling voor gegevensbinding wordt gekoppeld aan de C:\MongoDB\Data in Windows (of /MongoDB/Data op Unix) pad op de hostcomputer in de MongoDBserver container. Zie Docker docs: Bindingskoppelingenvoor meer informatie over koppelingskoppelingen voor gegevens.

MongoDB server resource toevoegen met koppeling voor binding van initialisatiegegevens

Om een data bind mount van de initialisatiemap aan de MongoDBserver-resource toe te voegen, roept u de methode WithInitBindMount 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...

De bindingskoppeling voor initialisatiegegevens wordt gebruikt om de MongoDBserver te initialiseren met gegevens. De bind mount voor initialisatiegegevens wordt gemonteerd op C:\MongoDB\Init in Windows (of /MongoDB/Init op Unix) op de hostmachine in de MongoDBserver-container en komt overeen met het /docker-entrypoint-initdb.d pad in de MongoDBserver-container. MongoDB voert de scripts uit die in deze map zijn gevonden. Dit is handig voor het laden van gegevens in de database.

MongoDB server resource 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 het docker.io/library/mongo-express containerimage, roept u de WithMongoExpress-methode aan op de MongoDBserver-resource.

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...

Fooi

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 MongoDBserver-resource. De standaard inloggegevens zijn:

  • ME_CONFIG_MONGODB_SERVER: de naam die is toegewezen aan de bovenliggende MongoDBServerResource, in dit geval zou dit mongozijn.
  • ME_CONFIG_BASICAUTH: een waarde van false.
  • ME_CONFIG_MONGODB_PORT: Toegekend aan de doelpoort van het primaire eindpunt van de moeder MongoDBServerResource.
  • ME_CONFIG_MONGODB_ADMINUSERNAME: Dezelfde gebruikersnaam als geconfigureerd in de bovenliggende MongoDBServerResource.
  • ME_CONFIG_MONGODB_ADMINPASSWORD: hetzelfde wachtwoord als geconfigureerd in de bovenliggende MongoDBServerResource.

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 MongoDBserver resource. De statuscontrole controleert of de MongoDBserver bron in werking is en of er een verbinding mee tot stand kan worden gebracht.

De hostingintegratie is afhankelijk van de 📦 AspNetCore.HealthChecks.MongoDb NuGet-pakket.

integratie van Client

Installeer de 📦Aspireom aan de slag te gaan met de .NET AspireMongoDBclient-integratie.MongoDB. Stuurprogramma NuGet-pakket in het clientverbruikende project, dat wil gezegd het project voor de toepassing die gebruikmaakt van de MongoDBclient. De MongoDBclient-integratie registreert een IMongoClient exemplaar dat u kunt gebruiken om te communiceren met de MongoDBserver-resource. 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 uw client-consumerende project de AddMongoDBClient-extensiemethode aan op elke IHostApplicationBuilder om een IMongoClient te registreren voor gebruik via de afhankelijkheidsinjectiecontainer. 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 MongoDBserver resource (of de databaseresource indien opgegeven) in het hostproject van de app. 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 en voeg MongoDBserver-resource en databaseresourcetoe.

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 MongoDBserver bron. 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.

Sleutel-MongoDBclient 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 AspireMongoDBclient-integratie 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.

Zie ook