首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB多文档事务: MongoQueryException (事务未激活)

MongoDB多文档事务: MongoQueryException (事务未激活)
EN

Stack Overflow用户
提问于 2022-10-24 09:44:40
回答 1查看 31关注 0票数 0

我正在测试多文档事务的简单用例。

但背景更为具体。

我正在使用Azure和MongoDB API4.0。

这是示例代码(我希望使用MongoRepository接口完成此工作):

代码语言:javascript
复制
@Transactional(value = "mongoTransactionManager", propagation = Propagation.REQUIRED)
  public void saveData() {

    repoType1.insert(MyType1.builder().id("1").build());

    repoType1.insert(MyType1.builder().id("2").build());

    // different document
    repoType2.insert(MyType2.builder().id("1234567").build());

    if (true) {
      throw new RuntimeException("should rollback everything!");
    }

    repoType1.insert(
        MyType1.builder().id("3").build());
}


@Bean
MongoTransactionManager mongoTransactionManager(MongoDatabaseFactory dbFactory) {
    return new MongoTransactionManager(dbFactory);
}

@Repository
@Transactional(value = "mongoTransactionManager", propagation = Propagation.REQUIRED)
public interface MyType1Repository
    extends MongoRepository<MyType1, String> {
}

@Repository
@Transactional(value = "mongoTransactionManager", propagation = Propagation.REQUIRED)
public interface MyType2Repository
    extends MongoRepository<MyType1, String> {
}

但我不断地发现以下错误:

com.mongodb.MongoCommandException:命令失败,错误2 (BadValue):'Error=2,Details=‘响应状态代码并不表示成功: BadRequest (400);Substatus: 1101;ActivityId: 6645fc9e-2c26-4c4a-841d-4a1236b1b6;原因:(消息:{“错误”:“事务不是活动的”)} ActivityId: 6645fc9e-2c26-4c4a-841d-4a1236b1b7b6,请求URI: Microsoft.Azure.Cosmos.Tracing.TraceData.ClientSideRequestStatisticsTraceDatum,RequestStats: Microsoft.Azure.Cosmos.Tracing.TraceData.ClientSideRequestStatisticsTraceDatum,SDK: Windows/10.0.19041 cosmos-netstandard-sdk/3.18.0);‘服务器上的cosmos-core-midware-test-001-westeurope.mongo.cosmos.azure.com:10255.’完整响应为{"ok":0.0,"errmsg":"Error=2,Details=‘响应状态代码不表示成功: BadRequest (400);Substatus: 1101;ActivityId: 6645fc9e-2c26-4c4a-841d-4a1236b1b6;原因:(消息:{“错误”:“事务不是活动的”}\r\n nActivityId: 6645fc9e-2c26-4c4a-841d-4a1236b1b7b6,请求URI: /apps/42c66b5d-4a29-4cc3-8eec-6f40b63129b6/services/102e98fc-69a2-45fe-8b26-4a5ed4c052af/partitions/941605a6-2524-48c2-9937-b518ca9b477e/replicas/133108113341839198p/,RequestStats: Microsoft.Azure.Cosmos.Tracing.TraceData.ClientSideRequestStatisticsTraceDatum,SDK: Windows/10.0.19041 cosmos-netstandard-sdk/3.18.0);,“代码”:2,"codeName":"BadValue"}

我测试了事务,它只在单个文档上调用insert时才能工作。

这可能是MongoDB API版本的问题吗?(将升级到4.2。有什么不同)

来自Azure MongoDB API 4.2。文件:

对我来说,这是很糟糕的文档,我知道切碎的集合不支持多文档事务,但是不需要分片的db实例呢?

EN

回答 1

Stack Overflow用户

发布于 2022-10-24 12:20:03

这与文档本身是否位于不同的碎片上无关。它适用于集合本身是以固定还是切分的形式创建的。

宇宙数据库( Cosmos DB for MongoDB )中有一篇文章专门谈到了这一点,在Azure Cosmos DB中为MongoDB使用多文档事务

如果使用Azure门户创建,则需要在此处选择突出显示的项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74179263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档