Skip to content

MongoDB

MongoDB 是一个跨平台的面向文档型的数据库程序,它被归为 NOSQL 数据库,CAP 从 2.3 版本开始支持 MongoDB 作为消息存储。

MongoDB 从 4.0 版本开始支持 ACID 事务,所以 CAP 也只支持 4.0 以上的 MongoDB,并且 MongoDB 需要部署为集群,因为 MongoDB 的 ACID 事务需要集群才可以使用。

有关开发环境如何快速搭建 MongoDB 4.0+ 集群,你可以我的参考 这篇文章

配置

要使用 MongoDB 存储,你需要从 NuGet 安装以下扩展包:

Install-Package DotNetCore.CAP.MongoDB

然后,你可以在 Startup.csConfigureServices 方法中添加基于内存的配置项。

public void ConfigureServices(IServiceCollection services)
{
    // ...

    services.AddCap(x =>
    {
        x.UseMongoDB(opt=>{
            //MongoDBOptions
        });
        // x.UseXXX ...
    });
}

MongoDBOptions

NAME DESCRIPTION TYPE DEFAULT
DatabaseName 数据库名称 string cap
DatabaseConnection 数据库连接字符串 string mongodb://localhost:27017
ReceivedCollection 接收消息集合名称 string cap.received
PublishedCollection 发送消息集合名称 string cap.published

Publish with transaction

下面的示例展示了如何利用 CAP 和 MongoDB 进行本地事务集成。

//NOTE: before your test, your need to create database and collection at first
//注意:MongoDB 不能在事务中创建数据库和集合,所以你需要单独创建它们,模拟一条记录插入则会自动创建        
//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();
}