integracja z bazą danych .NET AspireMongoDB
obejmuje:integracja hostingu oraz
Client integracja
MongoDB to baza danych NoSQL, która zapewnia wysoką wydajność, wysoką dostępność i łatwą skalowalność. Integracja .NET AspireMongoDB umożliwia łączenie się z istniejącymi wystąpieniami MongoDB (w tym MongoDB Atlas) lub tworzenie nowych wystąpień z .NET przy użyciu obrazu kontenera docker.io/library/mongo
Integracja hostingu
Serwer integracyjny MongoDB jest modelowany jako typ MongoDBServerResource, a baza danych jako typ MongoDBDatabaseResource. Aby uzyskać dostęp do tych typów i interfejsów API, dodaj pakiet NuGet 📦Aspire.Hosting.MongoDB w projekcie hosta aplikacji .
dotnet add package Aspire.Hosting.MongoDB
Aby uzyskać więcej informacji, zobacz dotnet add package lub Zarządzanie zależnościami pakietu w .NET aplikacjach.
Dodawanie zasobu serwera MongoDB i zasobu bazy danych
W projekcie hosta aplikacji wywołaj AddMongoDB, aby dodać i zwrócić konstruktor zasobów serwera MongoDB. Połącz wywołanie zwróconego konstruktora zasobów do AddDatabase, aby dodać zasób bazy danych MongoDB.
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...
Notatka
Kontener MongoDB może być powolny do uruchomienia, dlatego najlepiej użyć trwałego okresu, aby uniknąć niepotrzebnych ponownych uruchomień. Aby uzyskać więcej informacji, zobacz okres istnienia zasobu kontenera.
Gdy .NET.NET Aspire dodaje obraz kontenera do hosta aplikacji, jak pokazano w poprzednim przykładzie z obrazem docker.io/library/mongo
, tworzy nowe wystąpienie MongoDB na komputerze lokalnym. Odwołanie do konstruktora zasobów serwera MongoDB (zmiennej mongo
) służy do dodawania bazy danych. Baza danych nosi nazwę mongodb
, a następnie jest dodawana do ExampleProject
. Zasób serwera MongoDB zawiera poświadczenia domyślne:
-
MONGO_INITDB_ROOT_USERNAME
: wartośćadmin
. -
MONGO_INITDB_ROOT_PASSWORD
: losowepassword
wygenerowane przy użyciu metody CreateDefaultPasswordParameter.
Po uruchomieniu hosta aplikacji hasło jest przechowywane w magazynie tajnym hosta aplikacji. Jest on dodawany do sekcji Parameters
, na przykład:
{
"Parameters:mongo-password": "<THE_GENERATED_PASSWORD>"
}
Nazwa parametru jest mongo-password
, ale naprawdę wystarczy sformatować nazwę zasobu z sufiksem -password
. Aby uzyskać więcej informacji, zobacz Bezpieczne przechowywanie tajnych danych aplikacji w tworzeniu w ASP.NET Core oraz Dodaj zasób serwera MongoDB z parametrami.
Metoda WithReference konfiguruje połączenie w ExampleProject
o nazwie mongodb
, a WaitFor instruuje hosta aplikacji, aby nie uruchamiał usługi zależnej, dopóki zasób mongodb
nie będzie gotowy.
Napiwek
Jeśli wolisz nawiązać połączenie z istniejącym serwerem MongoDB, wywołaj AddConnectionString zamiast tego. Aby uzyskać więcej informacji, zobacz Odnieś się do istniejących zasobów.
Dodaj zasób serwera MongoDB z woluminem danych
Aby dodać wolumin danych do zasobu serwera MongoDB, wywołaj metodę WithDataVolume w zasobie serwera MongoDB:
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...
Wolumin danych jest używany do utrwalania danych serwera MongoDB poza cyklem życia kontenera. Wolumin danych jest instalowany w ścieżce /data/db
w kontenerze serwera MongoDB, a gdy nie podano parametru name
, nazwa jest generowana losowo. Aby uzyskać więcej informacji na temat wolumenów danych i dlaczego są preferowane od zamontowanych wolumenów , zobacz dokumentację Docker: Wolumeny.
Ostrzeżenie
Hasło jest przechowywane w woluminie danych. W przypadku korzystania z woluminu danych i zmiany hasła nie będzie działać, dopóki wolumin nie zostanie usunięty.
Dodaj zasób serwera MongoDB z montowaniem danych za pomocą powiązania
Aby dodać powiązanie danych do zasobu serwera MongoDB, wywołaj metodę WithDataBindMount:
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...
Ważny
Instalacje powiązane danych mają ograniczoną funkcjonalność w porównaniu z woluminami , co zapewnia lepszą wydajność, przenośność i bezpieczeństwo, co czyni je bardziej odpowiednimi dla środowisk produkcyjnych. Jednak punkty montowania za pomocą wiązania umożliwiają bezpośredni dostęp i modyfikację plików w systemie hosta, co jest idealne do prac deweloperskich i testowania, gdzie potrzebne są zmiany w czasie rzeczywistym.
Montaże powiązań danych polegają na systemie plików maszyny hosta do utrwalania danych serwera MongoDB podczas ponownych uruchomień kontenera. Powiązanie danych jest montowane na C:\MongoDB\Data
w systemie Windows (lub na /MongoDB/Data
na Unix) na ścieżce maszyny hosta w kontenerze serwera MongoDB. Aby uzyskać więcej informacji na temat instalacji powiązań danych, zobacz Docker docs: Bind mounts.
Dodaj zasób serwera MongoDB z montowaniem danych inicjalizacji
Aby dodać montowanie powiązania danych folderu inicjalizacji do zasobu serwera MongoDB, wywołaj metodę WithInitBindMount:
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...
Powiązanie montowania danych inicjalizacji służy do inicjalizacji serwera MongoDB z wykorzystaniem danych. Powiązanie danych inicjalizacyjnych jest montowane na ścieżce C:\MongoDB\Init
w systemie Windows (lub /MongoDB/Init
w Unix) na maszynie hosta, w kontenerze serwera MongoDB, i odwzorowuje na ścieżkę /docker-entrypoint-initdb.d
w kontenerze serwera MongoDB.
MongoDB wykonuje skrypty znalezione w tym folderze, co jest przydatne do ładowania danych do bazy danych.
Dodawanie zasobu serwera MongoDB z parametrami
Jeśli chcesz jawnie podać hasło używane przez obraz kontenera, możesz podać te poświadczenia w formie parametrów. Rozważmy następujący przykład alternatywny:
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...
Aby uzyskać więcej informacji na temat udostępniania parametrów, zobacz Parametry zewnętrzne.
Dodawanie zasobu MongoDB Express
MongoDB Express to internetowy interfejs użytkownika MongoDB administratora. Aby dodać zasób MongoDB Express odpowiadający obrazowi kontenera docker.io/library/mongo-express
, wywołaj metodę WithMongoExpress w zasobie serwera MongoDB:
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...
Napiwek
Aby skonfigurować port hosta dla łańcucha MongoExpressContainerResource, należy wywołać interfejs API WithHostPort i podać żądany numer portu.
Powyższy kod dodaje zasób MongoDB Express skonfigurowany do łączenia się z zasobem serwera MongoDB. Poświadczenia domyślne to:
-
ME_CONFIG_MONGODB_SERVER
: nazwa przypisana do nadrzędnegoMongoDBServerResource
, w tym przypadku będzie tomongo
. -
ME_CONFIG_BASICAUTH
: wartośćfalse
. -
ME_CONFIG_MONGODB_PORT
: przypisano z portu docelowego podstawowego punktu końcowego jednostki nadrzędnejMongoDBServerResource
. -
ME_CONFIG_MONGODB_ADMINUSERNAME
: ta sama nazwa użytkownika, która została skonfigurowana w nadrzędnymMongoDBServerResource
. -
ME_CONFIG_MONGODB_ADMINPASSWORD
: to samo hasło skonfigurowane w nadrzędnymMongoDBServerResource
.
Ponadto interfejs API WithMongoExpress
uwidacznia opcjonalny parametr configureContainer
typu Action<IResourceBuilder<MongoExpressContainerResource>>
używany do konfigurowania zasobu kontenera MongoDB Express.
Przeprowadzanie sprawdzania stanu integracji
Integracja hostowania MongoDB automatycznie dodaje kontrolę kondycji zasobu serwera MongoDB. Sprawdzanie kondycji sprawdza, czy zasób serwera MongoDB jest uruchomiony i czy można nawiązać z nim połączenie.
Integracja hostingu opiera się na pakiecie NuGet 📦 AspNetCore.HealthChecks.MongoDb.
integracja Client
Aby rozpocząć pracę z integracją klienta .NET AspireMongoDB, zainstaluj pakiet NuGet 📦Aspire.MongoDB.Driver w projekcie konsumpcyjnym klienta, czyli projekt aplikacji korzystającej z klienta MongoDB. Integracja klienta MongoDB rejestruje instancję IMongoClient, której można użyć, aby połączyć się z zasobem serwera MongoDB. Jeśli host aplikacji dodaje zasoby bazy danych MongoDB, zostanie również zarejestrowane wystąpienie IMongoDatabase.
dotnet add package Aspire.MongoDB.Driver
Dodaj klienta MongoDB
W pliku Program.cs projektu wykorzystującego klienta wywołaj metodę rozszerzenia AddMongoDBClient na dowolnym IHostApplicationBuilder, aby za pomocą kontenera wstrzykiwania zależności zarejestrować IMongoClient
do użycia. Metoda przyjmuje parametr nazwy połączenia.
builder.AddMongoDBClient(connectionName: "mongodb");
Napiwek
Parametr connectionName
musi być zgodny z nazwą używaną podczas dodawania zasobu serwera MongoDB (lub zasobu bazy danych, jeśli jest podany) w projekcie hosta aplikacji. Innymi słowy, podczas wywoływania AddDatabase
i przekazywania nazwy mongodb
, tej samej nazwy należy użyć przy wywoływaniu AddMongoDBClient
. Aby uzyskać więcej informacji, zobacz Dodawanie zasobu serwera MongoDB i zasobu bazy danych.
Następnie można pobrać instancję IMongoClient
, korzystając ze wstrzykiwania zależności. Na przykład aby pobrać klienta z przykładowej usługi:
public class ExampleService(IMongoClient client)
{
// Use client...
}
IMongoClient
służy do interakcji z zasobem serwera MongoDB. Może służyć do tworzenia baz danych, które nie są jeszcze znane projektowi hosta aplikacji. Podczas definiowania zasobu bazy danych MongoDB na hoście aplikacji można zamiast tego wymagać, aby kontener wstrzykiwania zależności dostarczał wystąpienie IMongoDatabase
. Aby uzyskać więcej informacji na temat wstrzykiwania zależności, zobacz .NET.
Dodaj klienta MongoDB z kluczem
Mogą wystąpić sytuacje, w których chcesz zarejestrować wiele wystąpień IMongoDatabase
z różnymi nazwami połączeń. Aby zarejestrować klientów z kluczem MongoDB, wywołaj metodę AddKeyedMongoDBClient.
builder.AddKeyedMongoDBClient(name: "mainDb");
builder.AddKeyedMongoDBClient(name: "loggingDb");
Ważny
W przypadku korzystania z usług z kluczem należy oczekiwać, że zasób MongoDB będzie skonfigurowany z dwiema nazwanymi bazami danych, jedną dla mainDb
i jedną dla loggingDb
.
Następnie można pobrać wystąpienia IMongoDatabase
przy użyciu wstrzykiwania zależności. Aby na przykład pobrać połączenie z przykładowej usługi:
public class ExampleService(
[FromKeyedServices("mainDb")] IMongoDatabase mainDatabase,
[FromKeyedServices("loggingDb")] IMongoDatabase loggingDatabase)
{
// Use databases...
}
Aby uzyskać więcej informacji na temat usług z kluczem, zobacz .NET wstrzykiwanie zależności: usługi z kluczem.
Konfiguracja
Integracja z bazą danych .NET AspireMongoDB zapewnia wiele metod konfiguracji i opcji spełniających wymagania i konwencje projektu.
Używanie parametrów połączenia
W przypadku używania parametrów połączenia z sekcji konfiguracji ConnectionStrings
można podać nazwę parametrów połączenia podczas wywoływania builder.AddMongoDBClient()
:
builder.AddMongoDBClient("mongo");
Parametry połączenia są pobierane z sekcji konfiguracji ConnectionStrings
. Rozważmy następującą konfigurację przykładu MongoDBJSON:
{
"ConnectionStrings": {
"mongo": "mongodb://server:port/test",
}
}
Alternatywnie, rozważmy następujący MongoDB przykład konfiguracji Atlas JSON:
{
"ConnectionStrings": {
"mongo": "mongodb+srv://username:password@server.mongodb.net/",
}
}
Aby uzyskać więcej informacji na temat formatowania tych parametrów połączenia, zobacz MongoDB: ConnectionString documentation.
Korzystanie z dostawców konfiguracji
Integracja .NET AspireMongoDB obsługuje Microsoft.Extensions.Configuration. Ładuje MongoDBSettings z konfiguracji przy użyciu klucza Aspire:MongoDB:Driver
. Poniższy fragment kodu to przykład pliku appsettings.json, który konfiguruje niektóre opcje:
{
"Aspire": {
"MongoDB": {
"Driver": {
"ConnectionString": "mongodb://server:port/test",
"DisableHealthChecks": false,
"HealthCheckTimeout": 10000,
"DisableTracing": false
},
}
}
Korzystanie z wbudowanych konfiguracji
Możesz również przekazać delegata Action<MongoDBSettings>
, aby skonfigurować niektóre lub wszystkie opcje wbudowane:
builder.AddMongoDBClient("mongodb",
static settings => settings.ConnectionString = "mongodb://server:port/test");
Opcje konfiguracji
Poniżej przedstawiono opcje konfigurowalne z odpowiednimi wartościami domyślnymi:
Nazwa | Opis |
---|---|
ConnectionString |
Parametry połączenia bazy danych MongoDB do nawiązania połączenia. |
DisableHealthChecks |
Wartość logiczna wskazująca, czy sprawdzanie kondycji bazy danych jest wyłączone, czy nie. |
HealthCheckTimeout |
Wartość int? wskazująca limit czasu kontroli kondycji MongoDB w milisekundach. |
DisableTracing |
Wartość logiczna wskazująca, czy śledzenie OpenTelemetry jest wyłączone, czy nie. |
Client kontrole stanu integracji
Domyślnie .NET.NET Aspireintegracje klienta mają kontrole stanu włączone dla wszystkich usług. Podobnie wiele .NET.NET Aspirehostowanie integracji również włączyć punkty końcowe sprawdzania kondycji. Aby uzyskać więcej informacji, zobacz:
- .NET sprawdzanie kondycji aplikacji w języku C#
- kontrole kondycji w ASP.NET Core
Domyślnie integracja klienta .NET AspireMongoDB obsługuje następujące scenariusze:
- Dodaje test kondycji po włączeniu, który weryfikuje, czy można nawiązać połączenie oraz uruchomić polecenia w bazie danych MongoDB w określonym czasie.
- Integruje się z punktem końcowym HTTP
/health
, który określa, że wszystkie zarejestrowane kontrole stanu zdrowia muszą zostać pomyślnie zakończone, aby aplikacja została uznana za gotową do akceptowania ruchu.
Obserwowanie i telemetria
.NET
.NET Aspire integracje automatycznie ustawiają konfiguracje rejestrowania, śledzenia i metryk, które są czasami nazywane filarami obserwowalności. Aby uzyskać więcej informacji na temat możliwości obserwacji integracji i telemetrii, zobacz omówienie integracji .NET.NET Aspire. W zależności od usługi pomocniczej niektóre integracje mogą obsługiwać tylko niektóre z tych funkcji. Na przykład niektóre integracje obsługują rejestrowanie i śledzenie, ale nie metryki. Funkcje telemetrii można również wyłączyć przy użyciu technik przedstawionych w sekcji konfiguracji
Logowanie
Integracja z bazą danych .NET AspireMongoDB korzysta ze standardowego rejestrowania .NET i widzisz wpisy dziennika z następujących kategorii:
-
MongoDB[.*]
: wszelkie wpisy dziennika z przestrzeni nazw MongoDB.
Śledzenie
Integracja bazy danych .NET AspireMongoDB emituje następujące działania śledzenia przy użyciu OpenTelemetry:
MongoDB.Driver.Core.Extensions.DiagnosticSources
Wskaźniki
Integracja .NET AspireMongoDB z bazą danych nie uwidacznia obecnie żadnych metryk OpenTelemetry.