интеграция базы данных .NET AspireMongoDB
Включает:интеграция хостинга и Client интеграция
MongoDB — это база данных NoSQL, которая обеспечивает высокую производительность, высокую доступность и простую масштабируемость. Интеграция .NET AspireMongoDB позволяет подключаться к существующим экземплярам MongoDB (включая MongoDB Atlas) или создавать новые экземпляры из .NET с помощью образа контейнера docker.io/library/mongo
Интеграция хостинга
Сервер MongoDB, на котором размещена интеграция, моделирует сервер в качестве типа MongoDBServerResource и базы данных в качестве типа MongoDBDatabaseResource. Чтобы получить доступ к этим типам и API, добавьте пакет NuGet 📦Aspire. Хостинг.MongoDB в проект хоста приложения .
dotnet add package Aspire.Hosting.MongoDB
Дополнительные сведения см. в статье dotnet add package или в разделе Управление зависимостями пакетов в приложениях .NET.
Добавить серверный ресурс MongoDB и ресурс базы данных
В проекте узла приложения вызовите AddMongoDB, чтобы добавить и вернуть построитель ресурсов сервера MongoDB. Прицепьте вызов возвращаемого построителя ресурсов для AddDatabase, чтобы добавить ресурс базы данных 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...
Заметка
Контейнер MongoDB может медленно запускаться, поэтому рекомендуется использовать постоянный срок службы для, чтобы избежать ненужных перезапусков. Дополнительные сведения см. в разделе время существования ресурса контейнера.
Когда .NET.NET Aspire добавляет образ контейнера в узел приложения, как показано в предыдущем примере с изображением docker.io/library/mongo
, он создает новый экземпляр MongoDB на локальном компьютере. Ссылка на построитель ресурсов сервера MongoDB (переменная mongo
) используется для добавления базы данных. База данных называется mongodb
, а затем добавляется в ExampleProject
. Ресурс сервера MongoDB включает учетные данные по умолчанию:
-
MONGO_INITDB_ROOT_USERNAME
: значениеadmin
. -
MONGO_INITDB_ROOT_PASSWORD
: случайныеpassword
, созданные с помощью метода CreateDefaultPasswordParameter.
При запуске хоста приложения пароль сохраняется в хранилище секретов этого хоста. Он добавлен в раздел Parameters
, например:
{
"Parameters:mongo-password": "<THE_GENERATED_PASSWORD>"
}
Имя параметра — mongo-password
, но на самом деле это просто форматирование имени ресурса с -password
суффиксом. Дополнительные сведения см. в статье Безопасное хранение секретов приложений в разработке в ASP.NET Core и Добавление ресурса сервера MongoDB с параметрами.
Метод WithReference настраивает подключение в ExampleProject
с именем mongodb
, и WaitFor указывает хосту приложения не запускать зависимую службу до тех пор, пока ресурс mongodb
не станет готовым.
Совет
Если вы хотите подключиться к существующему серверу MongoDB, вызовите AddConnectionString вместо этого. Дополнительные сведения см. в статье Справочник по существующим ресурсам.
Добавление ресурса сервера MongoDB с объемом данных
Чтобы добавить том данных в ресурс сервера MongoDB, вызовите метод WithDataVolume в ресурсе сервера 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...
Том данных используется для сохранения данных сервера MongoDB за пределами жизненного цикла контейнера. Том данных подключается по пути /data/db
в контейнере сервера MongoDB, и когда параметр name
не указан, имя создается случайным образом. Дополнительную информацию об объемах данных и о том, почему они предпочтительнее привязок, смотрите в документации Docker: Объемы.
Предупреждение
Пароль хранится в томе данных. При использовании тома данных и при изменении пароля он не будет работать, пока не удалите том.
Добавление ресурса сервера MongoDB с подключением привязки данных
Чтобы добавить привязку данных к ресурсу сервера MongoDB, вызовите метод 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...
Важный
Подключения привязки данных имеют ограниченные функциональные возможности по сравнению с томами, которые обеспечивают более высокую производительность, переносимость и безопасность, что делает их более подходящими для рабочих сред. Однако бинд-маунты позволяют напрямую получать доступ и изменять файлы на хост-системе, что идеально подходит для разработки и тестирования, когда требуются изменения в режиме реального времени.
Подключения привязки данных зависят от файловой системы хост-компьютера, чтобы сохранить данные сервера MongoDB во время перезапуска контейнера. Монтаж привязки данных осуществляется в точке C:\MongoDB\Data
на Windows (или /MongoDB/Data
на Unix) на хост-компьютере внутри контейнера сервера MongoDB. Подробную информацию о монтировании привязки данных см. в документации по Docker: монтирование привязки.
Добавление ресурса сервера MongoDB с привязкой данных инициализации через bind mount
Чтобы добавить подключение данных папки инициализации к ресурсу сервера MongoDB, вызовите метод 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...
Привязка данных инициализации используется для инициализации сервера MongoDB данными. Подключение привязки данных инициализации монтируется в Windows на пути C:\MongoDB\Init
(или на пути /MongoDB/Init
на Unix) на хост-компьютере в контейнере сервера MongoDB и сопоставляется с путем /docker-entrypoint-initdb.d
в контейнере сервера MongoDB.
MongoDB выполняет скрипты, найденные в этой папке, что удобно для загрузки данных в базу данных.
Добавление ресурса сервера MongoDB с параметрами
Если вы хотите явно указать пароль, используемый образом контейнера, эти учетные данные можно указать в качестве параметров. Рассмотрим следующий альтернативный пример:
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...
Дополнительные сведения о предоставлении параметров см. в разделе Внешние параметры.
Добавить ресурс MongoDB Express
MongoDB Express — это веб-интерфейс 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...
Совет
Чтобы настроить порт узла для цепочки MongoExpressContainerResource, выполните вызов к API WithHostPort и укажите нужный номер порта.
Приведенный выше код добавляет ресурс MongoDB Express, настроенный для подключения к ресурсу сервера MongoDB. Учетные данные по умолчанию:
-
ME_CONFIG_MONGODB_SERVER
: имя, назначенноеMongoDBServerResource
родителю, в этом случае будетmongo
. -
ME_CONFIG_BASICAUTH
: значениеfalse
. -
ME_CONFIG_MONGODB_PORT
: назначен из целевого порта основной конечной точки родительскогоMongoDBServerResource
. -
ME_CONFIG_MONGODB_ADMINUSERNAME
: то же имя пользователя, что и в родительскомMongoDBServerResource
. -
ME_CONFIG_MONGODB_ADMINPASSWORD
: тот же пароль, что и в родительскойMongoDBServerResource
.
Кроме того, API WithMongoExpress
предоставляет необязательный параметр configureContainer
типа Action<IResourceBuilder<MongoExpressContainerResource>>
, который используется для настройки ресурса контейнера MongoDB Express.
Проверка работоспособности интеграции
Интеграция размещения MongoDB автоматически добавляет проверку работоспособности для ресурса сервера MongoDB. Проверка работоспособности проверяет, запущен ли ресурс сервера MongoDB и что подключение можно установить к нему.
Интеграция с системой хостинга зависит от пакета NuGet 📦 AspNetCore.HealthChecks.MongoDb.
интеграция Client
Чтобы приступить к работе с интеграцией клиента .NET AspireMongoDB, установите пакет NuGet 📦Aspire.MongoDB.Драйвер в проект, использующий клиент, то есть в проект приложения, использующего клиент MongoDB. Интеграция клиента MongoDB регистрирует экземпляр IMongoClient, который можно использовать для взаимодействия с ресурсом сервера MongoDB. Если хост приложения добавляет ресурсы базы данных MongoDB, то регистрируется также и экземпляр IMongoDatabase.
dotnet add package Aspire.MongoDB.Driver
Добавить клиента MongoDB
В файле Program.cs проекта, используемого клиентом, вызовите метод расширения AddMongoDBClient для любой IHostApplicationBuilder, чтобы зарегистрировать IMongoClient
для использования с помощью контейнера внедрения зависимостей. Метод принимает параметр имени подключения.
builder.AddMongoDBClient(connectionName: "mongodb");
Совет
Параметр connectionName
должен соответствовать имени, используемому при добавлении ресурса сервера MongoDB (или ресурса базы данных при указании) в проекте узла приложения. Другими словами, при вызове AddDatabase
и указании имени mongodb
то же имя следует использовать при вызове AddMongoDBClient
. Дополнительные сведения см. в статье Добавление MongoDB ресурсов сервера и ресурса базы данных.
Затем можно получить экземпляр IMongoClient
с помощью внедрения зависимостей. Например, чтобы получить объект клиента из примера сервиса:
public class ExampleService(IMongoClient client)
{
// Use client...
}
IMongoClient
используется для взаимодействия с ресурсом сервера MongoDB. Его можно использовать для создания баз данных, которые еще не известны в проекте хоста приложения. При определении ресурса базы данных MongoDB в узле приложения вместо этого можно потребовать, чтобы контейнер внедрения зависимостей предоставлял экземпляр IMongoDatabase
. Дополнительные сведения о внедрении зависимостей см. в .NET внедрении зависимостей.
Добавить клиент с ключом MongoDB
Могут возникнуть ситуации, когда требуется зарегистрировать несколько экземпляров IMongoDatabase
с различными именами подключений. Чтобы зарегистрировать клиентов MongoDB с ключом, вызовите метод AddKeyedMongoDBClient.
builder.AddKeyedMongoDBClient(name: "mainDb");
builder.AddKeyedMongoDBClient(name: "loggingDb");
Важный
При использовании ключевых служб ожидается, что ресурс MongoDB настраивает две именованные базы данных, одну для mainDb
и одну для loggingDb
.
Затем можно извлечь экземпляры IMongoDatabase
с помощью инъекции зависимостей. Например, чтобы извлечь подключение из примерного сервиса:
public class ExampleService(
[FromKeyedServices("mainDb")] IMongoDatabase mainDatabase,
[FromKeyedServices("loggingDb")] IMongoDatabase loggingDatabase)
{
// Use databases...
}
Дополнительные сведения о ключевых службах см. в разделе .NET внедрение зависимостей: ключевыеслужбы.
Конфигурация
Интеграция .NET AspireMongoDB базы данных обеспечивает несколько подходов к конфигурации и вариантов для удовлетворения требований и соглашений вашего проекта.
Используйте строку подключения
При использовании строки подключения из раздела конфигурации ConnectionStrings
можно указать имя строки подключения при вызове builder.AddMongoDBClient()
:
builder.AddMongoDBClient("mongo");
Строка подключения извлекается из раздела конфигурации ConnectionStrings
. Рассмотрим следующий пример MongoDB конфигурации JSON:
{
"ConnectionStrings": {
"mongo": "mongodb://server:port/test",
}
}
В качестве альтернативы рассмотрим следующий пример конфигурации Atlas: MongoDBJSON.
{
"ConnectionStrings": {
"mongo": "mongodb+srv://username:password@server.mongodb.net/",
}
}
Дополнительные сведения о форматировании этой строки подключения см. в MongoDB: документации по ConnectionString.
Использование поставщиков конфигураций
Интеграция .NET AspireMongoDB поддерживает Microsoft.Extensions.Configuration. Он загружает MongoDBSettings из конфигурации, используя ключ Aspire:MongoDB:Driver
. Следующий фрагмент кода является примером файла appsettings.json, который настраивает некоторые параметры:
{
"Aspire": {
"MongoDB": {
"Driver": {
"ConnectionString": "mongodb://server:port/test",
"DisableHealthChecks": false,
"HealthCheckTimeout": 10000,
"DisableTracing": false
},
}
}
Использование встроенных конфигураций
Вы также можете передать делегат Action<MongoDBSettings>
, чтобы настроить некоторые или все параметры непосредственно в строке кода.
builder.AddMongoDBClient("mongodb",
static settings => settings.ConnectionString = "mongodb://server:port/test");
Параметры конфигурации
Ниже приведены настраиваемые параметры с соответствующими значениями по умолчанию:
Имя | Описание |
---|---|
ConnectionString |
Строка подключения базы данных MongoDB для подключения к ней. |
DisableHealthChecks |
Логическое значение, указывающее, отключена ли проверка работоспособности базы данных. |
HealthCheckTimeout |
Значение int? , указывающее время ожидания проверки работоспособности MongoDB в миллисекундах. |
DisableTracing |
Логическое значение, указывающее, отключена ли трассировка OpenTelemetry. |
Проверки здоровья
По умолчанию .NET.NET Aspire интеграции позволяют проверки работоспособности для всех служб. Дополнительные сведения см. в обзоре интеграции .NET.NET Aspire.
По умолчанию интеграция клиента .NET AspireMongoDB обрабатывает следующие сценарии:
- Добавляет проверку работоспособности при включении, которая проверяет, можно ли выполнять команды подключения к базе данных MongoDB в течение определенного периода времени.
- Интегрируется с HTTP-узлом
/health
, который указывает, что все зарегистрированные проверки работоспособности должны быть успешными, чтобы приложение считалось готовым принимать трафик.
Наблюдаемость и телеметрия
.NET
.NET Aspire интеграции автоматически настраивают конфигурации для ведения журналов, трассировки и метрик, которые иногда называются столпами наблюдаемости. Дополнительные сведения об наблюдаемости интеграции и телеметрии см. в .NET.NET Aspire обзоре интеграции. В зависимости от резервной службы некоторые интеграции могут поддерживать только некоторые из этих функций. Например, некоторые интеграции поддерживают ведение журнала и трассировку, но не метрики. Функции телеметрии также можно отключить с помощью методов, представленных в разделе конфигурации
Лесозаготовка
Интеграция с базой данных .NET AspireMongoDB использует стандартное ведение журнала .NET, и вы увидите записи журнала из следующих категорий:
-
MongoDB[.*]
: все записи журнала из пространства имен MongoDB.
Отслеживание
Интеграция базы данных .NET AspireMongoDB выдает следующие действия трассировки с помощью OpenTelemetry:
MongoDB.Driver.Core.Extensions.DiagnosticSources
Метрика
Интеграция .NET AspireMongoDB базы данных в настоящее время не предоставляет никаких OpenTelemetry метрик.
См. также
.NET Aspire