每次在Shopify商店中更新产品时,Webhook都会在非常短的时间内触发两次。
触发此webhook时,它会调用一个lambda,该lambda在数据库中的一行上执行任务,但是我发现,只需用表示task_complete: true
的列标记每一行,然后有条件地检查{ {1}}并发性不足。我正在接受双重任务运行和其他副作用。
我知道这是交易的来源。我正在执行以下操作:
db.result.task_complete === false
我在终端中看到确实正在查询数据库,如下所示:
return await db.connection.transaction({ isolationLevel: db.Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE }, async (t) => {
return db.orders.findOrCreate({
where: {
shopify_order_id: order.id.toString()
},
limit: 1,
transaction: t,
lock: true,
skipLocked: true
})
.then(async...
那为什么每次运行lambda任务都会得到两个SELECT ... LIMIT 1 FOR UPDATE SKIP LOCKED;
? Sequelize网站上的文档没有提供我所需的清晰度。