integração de banco de dados .NET AspireMongoDB
Inclui:integração de hospedagem e
Client integração
MongoDB é um banco de dados NoSQL que fornece alto desempenho, alta disponibilidade e escalabilidade fácil. A integração .NET AspireMongoDB permite que você se conecte a instâncias MongoDB existentes (incluindo MongoDB Atlas) ou crie novas instâncias de .NET com a imagem de contêiner docker.io/library/mongo
Integração de hospedagem
O MongoDB servidor de integração de hospedagem modela o servidor como o tipo de MongoDBServerResource e o banco de dados como o tipo MongoDBDatabaseResource. Para acessar esses tipos e APIs, adicione o pacote NuGet 📦Aspire.Hosting.MongoDB no projeto do host do aplicativo .
dotnet add package Aspire.Hosting.MongoDB
Para obter mais informações, consulte dotnet add package ou Gerenciar dependências de pacotes em aplicações .NET.
Adicionar recurso de servidor MongoDB e recurso de banco de dados
No projeto de host do aplicativo, chame AddMongoDB para adicionar e retornar um construtor de recursos do servidor MongoDB. Encadear uma chamada ao construtor de recursos retornado para AddDatabase, a fim de adicionar um recurso de banco de dados 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...
Nota
O contêiner de
Quando .NET.NET Aspire adiciona uma imagem de contêiner ao host do aplicativo, conforme mostrado no exemplo anterior com a imagem docker.io/library/mongo
, ele cria uma nova instância de MongoDB em seu computador local. Uma referência ao construtor de recursos do servidor MongoDB (a variável mongo
) é usada para adicionar um banco de dados. O banco de dados é nomeado mongodb
e, em seguida, adicionado ao ExampleProject
. O recurso de servidor MongoDB inclui credenciais padrão:
-
MONGO_INITDB_ROOT_USERNAME
: um valor deadmin
. -
MONGO_INITDB_ROOT_PASSWORD
:password
aleatório gerado usando o método CreateDefaultPasswordParameter.
Quando o host do aplicativo é executado, a senha é armazenada no repositório secreto do host do aplicativo. Ele é adicionado à seção Parameters
, por exemplo:
{
"Parameters:mongo-password": "<THE_GENERATED_PASSWORD>"
}
O nome do parâmetro é mongo-password
, mas na verdade é apenas formatar o nome do recurso com um sufixo -password
. Para obter mais informações, consulte Armazenamento seguro de segredos do aplicativo em desenvolvimento em ASP.NET Core e Adicione MongoDB recurso de servidor com parâmetros.
O método WithReference configura uma conexão no ExampleProject
chamado mongodb
e o WaitFor instrui o host do aplicativo a não iniciar o serviço dependente até que o recurso de mongodb
esteja pronto.
Dica
Se você preferir se conectar a um servidor MongoDB existente, chame AddConnectionString em vez disso. Para obter mais informações, consulte Referenciar recursos existentes.
Adicionar MongoDB recurso de servidor com volume de dados
Para adicionar um volume de dados ao recurso de servidor MongoDB, chame o método WithDataVolume no recurso de servidor 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...
O volume de dados é usado para persistir os dados do servidor MongoDB fora do ciclo de vida de seu contêiner. O volume de dados é montado no caminho /data/db
no contêiner do servidor MongoDB e, quando um parâmetro name
não é fornecido, o nome é gerado aleatoriamente. Para obter mais informações sobre volumes de dados e detalhes sobre por que eles são preferidos em vez de montagens de vinculadores, consulte a Docker documentação: Volumes.
Aviso
A senha é armazenada no volume de dados. Ao usar um volume de dados e se a senha for alterada, ela não funcionará até que você exclua o volume.
Adicionar recurso de servidor MongoDB com montagem de dados com vinculação
Para adicionar uma montagem de associação de dados ao recurso de servidor MongoDB, chame o método 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...
Importante
Os de dados associam montagens têm funcionalidade limitada em comparação com volumes, que oferecem melhor desempenho, portabilidade e segurança, tornando-os mais adequados para ambientes de produção. No entanto, os bind mounts permitem acesso direto e modificação de arquivos no sistema host, ideal para desenvolvimento e testes em que as alterações em tempo real são necessárias.
As montagens de associação de dados dependem do sistema de arquivos do computador host para manter os dados do servidor MongoDB em reinicializações de contêiner. O ponto de montagem de dados está montado no C:\MongoDB\Data
no caminho do Windows (ou /MongoDB/Data
no Unix) no contêiner de servidor da máquina host MongoDB. Para obter mais informações sobre montagens bind de dados, consulte a documentação Docker: Bind mounts.
Adicionar o recurso de servidor MongoDB com montagem bind de dados de inicialização
Para adicionar uma montagem de associação de dados de pasta de inicialização ao recurso de servidor MongoDB, chame o método 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...
A montagem de associação de dados de inicialização é usada para inicializar o servidor MongoDB com dados. A montagem de bind mount dos dados de inicialização é realizada no caminho C:\MongoDB\Init
no Windows (ou /MongoDB/Init
no Unix) na máquina host dentro do contêiner do servidor MongoDB e mapeia para o caminho /docker-entrypoint-initdb.d
no contêiner do servidor MongoDB.
MongoDB executa os scripts encontrados nessa pasta, o que é útil para carregar dados no banco de dados.
Adicionar MongoDB recurso de servidor com parâmetros
Quando quiser fornecer explicitamente a senha usada pela imagem de contêiner, você pode fornecer essas credenciais como parâmetros. Considere o seguinte exemplo alternativo:
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...
Para obter mais informações sobre como fornecer parâmetros, consulte Parâmetros externos.
Adicionar recurso Expresso MongoDB
MongoDB Express é uma interface do usuário MongoDB administrador baseada na Web. Para adicionar um recurso MongoDB Express que corresponda à imagem de contêiner docker.io/library/mongo-express
, chame o método WithMongoExpress no recurso do servidor 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...
Dica
Para configurar a porta host para a cadeia MongoExpressContainerResource, faça uma chamada à API de WithHostPort e forneça o número de porta desejado.
O código anterior adiciona um recurso MongoDB Express configurado para se conectar ao recurso de servidor MongoDB. As credenciais padrão são:
-
ME_CONFIG_MONGODB_SERVER
: o nome atribuído aoMongoDBServerResource
pai e, nesse caso, seriamongo
. -
ME_CONFIG_BASICAUTH
: um valor defalse
. -
ME_CONFIG_MONGODB_PORT
: Atribuído à porta de destino do ponto de extremidade primário do paiMongoDBServerResource
. -
ME_CONFIG_MONGODB_ADMINUSERNAME
: o mesmo nome de usuário configurado no paiMongoDBServerResource
. -
ME_CONFIG_MONGODB_ADMINPASSWORD
: a mesma senha configurada no paiMongoDBServerResource
.
Além disso, a API WithMongoExpress
expõe um parâmetro configureContainer
opcional do tipo Action<IResourceBuilder<MongoExpressContainerResource>>
que você usa para configurar o recurso de contêiner do MongoDB Express.
Verificações de integridade de integração de hospedagem
A integração de hospedagem MongoDB adiciona automaticamente uma verificação de integridade para o recurso de servidor MongoDB. A verificação de integridade verifica se o recurso de servidor MongoDB está em execução e se uma conexão pode ser estabelecida com ele.
A integração de hospedagem depende do pacote NuGet 📦 AspNetCore.HealthChecks.MongoDb.
integração Client
Para começar a usar a integração do cliente .NET AspireMongoDB, instale o pacote NuGet do driver 📦AspireMongoDB no projeto que consome o cliente, ou seja, o projeto do aplicativo que usa o cliente MongoDB. A integração do cliente MongoDB registra uma instância IMongoClient que você pode usar para interagir com o recurso de servidor MongoDB. Se o host do aplicativo adicionar os recursos de banco de dados MongoDB, a instância IMongoDatabase também será registrada.
dotnet add package Aspire.MongoDB.Driver
Adicionar MongoDB cliente
No arquivo Program.cs do projeto que consome o cliente, chame o método de extensão AddMongoDBClient em qualquer IHostApplicationBuilder para registrar um IMongoClient
para uso por meio do contêiner de injeção de dependência. O método usa um parâmetro de nome de conexão.
builder.AddMongoDBClient(connectionName: "mongodb");
Dica
O parâmetro connectionName
deve corresponder ao nome usado ao adicionar o recurso de servidor MongoDB (ou o recurso de banco de dados quando fornecido) no projeto de host do aplicativo. Em outras palavras, quando você chama AddDatabase
e fornece um nome de mongodb
esse mesmo nome deve ser usado ao chamar AddMongoDBClient
. Para obter mais informações, consulte Adicionar recurso de servidor e recurso de banco de dados MongoDB.
Em seguida, você pode recuperar a instância IMongoClient
usando injeção de dependência. Por exemplo, para recuperar o cliente de um serviço de exemplo:
public class ExampleService(IMongoClient client)
{
// Use client...
}
O IMongoClient
é usado para interagir com o recurso de servidor MongoDB. Ele pode ser usado para criar bancos de dados que ainda não são conhecidos pelo projeto de host do aplicativo. Ao definir um recurso de banco de dados MongoDB no host do aplicativo, você pode exigir que o contêiner de injeção de dependência forneça uma instância IMongoDatabase
. Para obter mais informações sobre injeção de dependência, consulte .NET injeção de dependência.
Adicionar cliente chaveado MongoDB
Pode haver situações em que você deseja registrar várias instâncias de IMongoDatabase
com nomes de conexão diferentes. Para registrar clientes chaveados MongoDB, chame o método AddKeyedMongoDBClient:
builder.AddKeyedMongoDBClient(name: "mainDb");
builder.AddKeyedMongoDBClient(name: "loggingDb");
Importante
Ao usar serviços com chave, espera-se que seu recurso de MongoDB configure dois bancos de dados nomeados, um para o mainDb
e outro para o loggingDb
.
Em seguida, você pode recuperar as instâncias de IMongoDatabase
usando a injeção de dependência. Por exemplo, para recuperar a conexão de um serviço de exemplo:
public class ExampleService(
[FromKeyedServices("mainDb")] IMongoDatabase mainDatabase,
[FromKeyedServices("loggingDb")] IMongoDatabase loggingDatabase)
{
// Use databases...
}
Para obter mais informações sobre serviços chaveados, consulte .NET injeção de dependência: serviços chaveados.
Configuração
A integração de banco de dados .NET AspireMongoDB fornece várias abordagens de configuração e opções para atender aos requisitos e convenções do seu projeto.
Usar uma string de conexão
Ao usar uma cadeia de conexão da seção de configuração ConnectionStrings
, você pode fornecer o nome da cadeia de conexão ao chamar builder.AddMongoDBClient()
:
builder.AddMongoDBClient("mongo");
A cadeia de conexão é recuperada da seção de configuração ConnectionStrings
. Considere a seguinte configuração do exemplo MongoDBJSON:
{
"ConnectionStrings": {
"mongo": "mongodb://server:port/test",
}
}
Como alternativa, considere a seguinte configuração de exemplo MongoDB Atlas JSON:
{
"ConnectionStrings": {
"mongo": "mongodb+srv://username:password@server.mongodb.net/",
}
}
Para obter mais informações sobre como formatar essa cadeia de conexão, consulte MongoDB: documentação do ConnectionString.
Usar provedores de configuração
A integração .NET AspireMongoDB dá suporte a Microsoft.Extensions.Configuration. Ele carrega a MongoDBSettings da configuração usando a chave Aspire:MongoDB:Driver
. O snippet a seguir é um exemplo de um arquivo de appsettings.json que configura algumas das opções:
{
"Aspire": {
"MongoDB": {
"Driver": {
"ConnectionString": "mongodb://server:port/test",
"DisableHealthChecks": false,
"HealthCheckTimeout": 10000,
"DisableTracing": false
},
}
}
Usar configurações embutidas
Você também pode passar o delegado Action<MongoDBSettings>
para configurar algumas ou todas as opções em linha:
builder.AddMongoDBClient("mongodb",
static settings => settings.ConnectionString = "mongodb://server:port/test");
Opções de configuração
Aqui estão as opções configuráveis com valores padrão correspondentes:
Nome | Descrição |
---|---|
ConnectionString |
A cadeia de conexão do banco de dados MongoDB ao qual se conectar. |
DisableHealthChecks |
Um valor booliano que indica se a verificação de integridade do banco de dados está desabilitada ou não. |
HealthCheckTimeout |
Um valor int? que indica o tempo limite de verificação de integridade MongoDB em milissegundos. |
DisableTracing |
Um valor booliano que indica se o rastreamento de OpenTelemetry está desabilitado ou não. |
Client checagens de saúde de integração
Por padrão, .NET.NET Aspireintegrações de cliente têm verificações de integridade habilitadas para todos os serviços. Da mesma forma, muitas integrações de hospedagem .NET.NET Aspire também habilitam endpoints para verificação de saúde. Para obter mais informações, consulte:
- .NET checagens de saúde do aplicativo em C#
- verificações de integridade do no ASP.NET Core
Por padrão, a integração do cliente .NET AspireMongoDB lida com os seguintes cenários:
- Adiciona uma verificação de integridade, quando habilitada, que verifica se uma conexão pode ser feita e comandos podem ser executados no banco de dados MongoDB dentro de um determinado período de tempo.
- Integra-se ao endpoint HTTP
/health
, que especifica que todas as verificações de integridade registradas devem ser aprovadas para que o aplicativo esteja pronto para aceitar tráfego.
Observabilidade e telemetria
.NET .NET Aspire integrações configuram automaticamente configurações de Log, Rastreamento e Métricas, que às vezes são conhecidas como os pilares da observabilidade. Para obter mais informações sobre a observabilidade e a telemetria de integração, consulte .NET.NET Aspire visão geral das integrações. Dependendo do serviço de backup, algumas integrações só podem dar suporte a alguns desses recursos. Por exemplo, algumas integrações dão suporte a registro em log e rastreamento, mas não a métricas. Os recursos de telemetria também podem ser desabilitados usando as técnicas apresentadas na seção Configuration.
Registro
A integração de banco de dados .NET AspireMongoDB usa o log de .NET padrão e você vê entradas de log das seguintes categorias:
-
MongoDB[.*]
: todas as entradas de log do namespace MongoDB.
Rastreamento
A integração de banco de dados .NET AspireMongoDB emite as seguintes atividades de rastreamento usando OpenTelemetry:
MongoDB.Driver.Core.Extensions.DiagnosticSources
Métricas
No momento, a integração do banco de dados .NET AspireMongoDB não expõe nenhuma métrica OpenTelemetry.