我使用
mongoose
与 sessions
一起在我们的 nodejs
+ express
后端执行 ACID 事务。
最近,我需要向我们的一名工作人员发送一条消息(由 RabbitMQ 支持)以进行后期事务操作。我无法在提交后直接将消息发送给我们的工作人员,因为它背后有一个复杂的工作流程,完成事务并不总是意味着必须调用代码。
我相信我需要使用事件发射器来注册
.once('onCommit', ...)
事件,并在交易完成时调用 emit('onCommit')
。但这是手动方法。
我想知道
mongoose
是否提供开箱即用的支持以使用 mongoose.ClientSession
进行后期事务操作。我看到猫鼬会话本身就是事件监听器,但我找不到任何相关文档。我猜会话事件是供内部使用的。
有人可以启发我吗?
谢谢你
您应该能够使用
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
}
});