猫鼬事务和后事务操作



我使用mongoosesessions在我们的nodejs+express后端执行ACID事务。

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

我认为我需要使用事件发射器来注册.once('onCommit', ...)事件,并在事务完成时调用emit('onCommit')。但这是手动方法。

我想知道mongoose中是否有开箱即用的支持,可以使用mongoose.ClientSession进行后事务操作。我看到mongoose会话本身是事件侦听器,但我找不到任何相关文档。我猜会话事件是内部使用的。

谁能开导我一下?谢谢

您应该能够使用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';
}
});

最新更新