我正在开发一个需要处理MongoDB文档更新同步的应用程序。为此,我使用Azure Cosmos DB MongoDB API 4.0,它支持多文档事务。
MongoDB.Driver.MongoCommandException: Command update failed: Error=112, Details='Response status code does not indicate success: Conflict (409); Substatus: 5403; ActivityId: 88cc0f1f-708b-4c42-9ba7-70e367f16fe3; Reason: ({
"Errors": [
"Conflicting request to resource has been attempted. Retry to avoid conflicts."
]
});.
at MongoDB.Driver.Core.WireProtocol.CommandUsingCommandMessageWireProtocol`1.ProcessResponse(ConnectionId connectionId, CommandMessage responseMessage)
at MongoDB.Driver.Core.WireProtocol.CommandUsingCommandMessageWireProtocol`1.ExecuteAsync(IConnection connection, CancellationToken cancellationToken)
at MongoDB.Driver.Core.Servers.Server.ServerChannel.ExecuteProtocolAsync[TResult](IWireProtocol`1 protocol, ICoreSession session, CancellationToken cancellationToken)
at MongoDB.Driver.Core.Operations.RetryableWriteOperationExecutor.ExecuteAsync[TResult](IRetryableWriteOperation`1 operation, RetryableWriteContext context, CancellationToken cancellationToken)
at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase`1.ExecuteBatchAsync(RetryableWriteContext context, Batch batch, CancellationToken cancellationToken)
at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase`1.ExecuteBatchesAsync(RetryableWriteContext context, CancellationToken cancellationToken)
at MongoDB.Driver.Core.Operations.BulkMixedWriteOperation.ExecuteBatchAsync(RetryableWriteContext context, Batch batch, CancellationToken cancellationToken)
at MongoDB.Driver.Core.Operations.BulkMixedWriteOperation.ExecuteAsync(IWriteBinding binding, CancellationToken cancellationToken)
at MongoDB.Driver.OperationExecutor.ExecuteWriteOperationAsync[TResult](IWriteBinding binding, IWriteOperation`1 operation, CancellationToken cancellationToken)
at MongoDB.Driver.MongoCollectionImpl`1.ExecuteWriteOperationAsync[TResult](IClientSessionHandle session, IWriteOperation`1 operation, CancellationToken cancellationToken)
at MongoDB.Driver.MongoCollectionImpl`1.BulkWriteAsync(IClientSessionHandle session, IEnumerable`1 requests, BulkWriteOptions options, CancellationToken cancellationToken)
at MongoDB.Driver.MongoCollectionBase`1.UpdateOneAsync(FilterDefinition`1 filter, UpdateDefinition`1 update, UpdateOptions options, Func`3 bulkWriteAsync)
我尝试了几次失败的更新操作(延迟了1000毫秒),但没有任何运气。
每次重试都以相同的异常消息结束。
最后,异常消息更改为:
MongoDB.Driver.MongoCommandException: Command update failed: Error=2, Details='Response status code does not indicate success: BadRequest (400); Substatus: 1101; ActivityId: bcb86266-aa9a-4a2d-9841-7f451d6c72ee; Reason: (Message: {"Errors":["Transaction is not active"]}
我相信最后一个异常是不同的,因为事务超时了(文档显示超时= 5秒)。
你对错误的诊断非常准确。Azure Cosmos DB API for MongoDB有列出常见错误和解决方案的文档。
(1) 112当另一事务或写入操作使用同一文档时发生错误。建议的解决方案是重试操作,直到操作成功。
(2)如您所述,第二个错误-“事务未激活”表示已超过5秒超时。是否可以限制在多文档事务中执行的操作范围?
另一种可能性是,由于可用的RU(吞吐量)数量不足,如果操作受到限制(并在服务器端重试),则操作的时间可能比预期的长。检查这一点的一个好方法是查看规范化RU消耗是否达到100%,是否启用了服务器端重试(默认情况下启用)。如果是这种情况,增加RU的数量(吞吐量)应该可以解决问题。
我有一个类,它有一个方法,该方法调用另一个服务上的另一个方法。大概是这样的: 我预计一个实体将被插入,但是如果任何嵌套事务抛出异常插入将拒绝,即使这个异常也是在处理的。 我可以用注释。但它会胜过表演。
出现运行时异常--这应该会导致事务回滚。 我希望能够截获异常,并回复一个真正的消息(而不是异常)给客户机。因此,我开始实现一个错误处理程序: 其中: null null null 如何配置camel,既防止事务中的消息刷新,又能够将异常转换为已处理的错误消息?
我在tomcat服务器中使用具有多个数据源配置的JTA原子事务。有时我会遇到以下异常: JTA事务意外回滚(可能是由于超时);嵌套的异常是javax。交易回滚异常:事务被设置为仅回滚 出现这种异常的原因是什么?
我正在使用quarkus版本,需要知道如何处理未知endpoint。当我试图命中尚未实现的endpoint时,它只会发送,而不是我希望实现的异常。我无法找到相同的实现。有人能帮我做这个吗?
我在存储库类中有一个方法,标记为,该方面正在执行,如stacktrace中所示,但抛出的异常是“Transaction required exception” 电磁场: 交易: 我真的要疯了,任何帮助都会很好。 似乎,有一个事务,它被检查为完成,加入事务失败,所以它标记为仅回滚,因为它不能加入它。
这很好,但并不总是在代码中抛出运行时异常。因此,我挖掘并发现如下所示的rollbackFor; 现在,我必须更改所有代码,以使用RollBackfor更改@Transactional。但是还有其他方法可以将所有@transaction advice属性更改为rollbackFor=exception.class吗?