Mongoose 事务和事务后操作

问题描述 投票:0回答:1

我使用

mongoose
sessions
一起在我们的
nodejs
+
express
后端执行 ACID 事务。

最近,我需要向我们的一名工作人员发送一条消息(由 RabbitMQ 支持)以进行后期事务操作。我无法在提交后直接将消息发送给我们的工作人员,因为它背后有一个复杂的工作流程,完成事务并不总是意味着必须调用代码。

我相信我需要使用事件发射器来注册

.once('onCommit', ...)
事件,并在交易完成时调用
emit('onCommit')
。但这是手动方法。

我想知道

mongoose
是否提供开箱即用的支持以使用
mongoose.ClientSession
进行后期事务操作。我看到猫鼬会话本身就是事件监听器,但我找不到任何相关文档。我猜会话事件是供内部使用的。

有人可以启发我吗?

谢谢你

javascript node.js mongodb mongoose
1个回答
1
投票

您应该能够使用

ended
事件。因此,如果您使用
session.endSession();

完成交易操作,下面的代码应该可以工作
session.on('ended', () => 'post transaction operation');

此外,如果您需要有关已提交或已中止的事务的信息。您可以获取会话后数据并检查交易状态,如下所示:

session.on('ended', (postSession) => {
    const state = postSession.transaction.state;

    if (state === 'TRANSACTION_COMMITTED') {
      // successful transaction operation
    }

    if (state === 'TRANSACTION_ABORTED') {
      // aborted transaction operation
    }
 });
© www.soinside.com 2019 - 2024. All rights reserved.