在slingr.io上的应用程序中,有一个侦听器,它会在网络钩子到达时执行。在监听程序中,我们有一个类似这样的代码:
// process webhook
// ...
record.field('status').val('active');
sys.data.save(record);
在日志中我们看到,在许多情况下,我们得到以下错误:
» 2019-09-25 18:52:00.349 ERROR system@nbt.slingrs.io Optimistic locking exception saving record [Order T792-18]
这种情况并不总是发生,但仅在某些情况下发生。原因是什么?如何防止它的发生?
发布于 2019-09-26 06:02:51
这是由于并发问题,因为许多webhook可能几乎同时到达,因此多个线程试图并发更新记录。
在编辑记录时避免此问题的最方便的方法是使用lock()
方法,如下所示:
// process webhook
// ...
record.lock(function(record) {
record.field('status').val('active');
sys.data.save(record);
);
如果其他线程试图同时更新记录,这将放入一个信号量。
https://stackoverflow.com/questions/58107118
复制相似问题