MongoDB¶
MongoDB is a cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with schema.
CAP has supported MongoDB as persistent since version 2.3 .
MongoDB supports ACID transactions since version 4.0, so CAP only supports MongoDB above 4.0, and MongoDB needs to be deployed as a cluster, because MongoDB's ACID transaction requires a cluster to be used.
For a quick development of the MongoDB 4.0+ cluster for the development environment, you can refer to this article.
Configuration¶
To use MongoDB storage, you need to install the following extensions from NuGet:
PM> Install-Package DotNetCore.CAP.MongoDB
Next, add configuration items to the ConfigureServices method of Startup.cs.
public void ConfigureServices(IServiceCollection services) { // ... services.AddCap(x => { x.UseMongoDB(opt=>{ //MongoDBOptions }); // x.UseXXX ... }); }
MongoDB Options¶
| NAME | DESCRIPTION | TYPE | DEFAULT |
|---|---|---|---|
| DatabaseName | Database name | string | cap |
| DatabaseConnection | Database connection string | string | mongodb://localhost:27017 |
| ReceivedCollection | Database received message collection name | string | cap.received |
| PublishedCollection | Database published message collection name | string | cap.published |
Publish with transaction¶
The following example shows how to leverage CAP and MongoDB for local transaction integration.
//NOTE: Before your test, your need to create database and collection at first. // Mongo can't create databases and collections in transactions automatic, // so you need to create them separately, simulating a record insert // will automatically create. // var mycollection = _client.GetDatabase("test") // .GetCollection<BsonDocument>("test.collection"); // mycollection.InsertOne(new BsonDocument { { "test", "test" } }); using (var session = _client.StartTransaction(_capBus, autoCommit: false)) { var collection = _client.GetDatabase("test") .GetCollection<BsonDocument>("test.collection"); collection.InsertOne(session, new BsonDocument { { "hello", "world" } }); _capBus.Publish("sample.rabbitmq.mongodb", DateTime.Now); session.CommitTransaction(); }