You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

mongodb.md 2.2 KiB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # MongoDB
  2. MongoDB 是一个跨平台的面向文档型的数据库程序,它被归为 NOSQL 数据库,CAP 从 2.3 版本开始支持 MongoDB 作为消息存储。
  3. MongoDB 从 4.0 版本开始支持 ACID 事务,所以 CAP 也只支持 4.0 以上的 MongoDB,并且 MongoDB 需要部署为集群,因为 MongoDB 的 ACID 事务需要集群才可以使用。
  4. 有关开发环境如何快速搭建 MongoDB 4.0+ 集群,你可以我的参考 [这篇文章](https://www.cnblogs.com/savorboard/p/mongodb-4-cluster-install.html)。
  5. ## 配置
  6. 要使用 MongoDB 存储,你需要从 NuGet 安装以下扩展包:
  7. ```shell
  8. Install-Package DotNetCore.CAP.MongoDB
  9. ```
  10. 然后,你可以在 `Startup.cs` 的 `ConfigureServices` 方法中添加基于内存的配置项。
  11. ```csharp
  12. public void ConfigureServices(IServiceCollection services)
  13. {
  14. // ...
  15. services.AddCap(x =>
  16. {
  17. x.UseMongoDB(opt=>{
  18. //MongoDBOptions
  19. });
  20. // x.UseXXX ...
  21. });
  22. }
  23. ```
  24. #### 配置项
  25. NAME | DESCRIPTION | TYPE | DEFAULT
  26. :---|:---|---|:---
  27. DatabaseName | 数据库名称 | string | cap
  28. DatabaseConnection | 数据库连接字符串 | string | mongodb://localhost:27017
  29. ReceivedCollection | 接收消息集合名称 | string | cap.received
  30. PublishedCollection | 发送消息集合名称 | string | cap.published
  31. ## 使用事务发布消息
  32. 下面的示例展示了如何利用 CAP 和 MongoDB 进行本地事务集成。
  33. ```csharp
  34. //NOTE: before your test, your need to create database and collection at first
  35. //注意:MongoDB 不能在事务中创建数据库和集合,所以你需要单独创建它们,模拟一条记录插入则会自动创建
  36. //var mycollection = _client.GetDatabase("test").GetCollection<BsonDocument>("test.collection");
  37. //mycollection.InsertOne(new BsonDocument { { "test", "test" } });
  38. using (var session = _client.StartTransaction(_capBus, autoCommit: false))
  39. {
  40. var collection = _client.GetDatabase("test").GetCollection<BsonDocument>("test.collection");
  41. collection.InsertOne(session, new BsonDocument { { "hello", "world" } });
  42. _capBus.Publish("sample.rabbitmq.mongodb", DateTime.Now);
  43. session.CommitTransaction();
  44. }
  45. ```