Slingr 保存记录时的乐观锁定

Slingr 保存记录时的乐观锁定,slingr,Slingr,在slingr.io上的应用程序中,有一个侦听器在webhook到达时执行。在该侦听器中,我们有如下代码: // process webhook // ... record.field('status').val('active'); sys.data.save(record); // process webhook // ... record.lock(function(record) { record.field('status').val('active'); sys.data.

在slingr.io上的应用程序中,有一个侦听器在webhook到达时执行。在该侦听器中,我们有如下代码:

// process webhook
// ...
record.field('status').val('active');
sys.data.save(record);
// process webhook
// ...
record.lock(function(record) {
  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]

这不是一直都在发生,只是在某些情况下。原因是什么以及如何防止它发生?

这是由于并发问题,因为许多Webhook可能几乎同时到达,因此多个线程试图同时更新记录

编辑记录时避免此问题的最方便的方法是使用如下
lock()
方法:

// process webhook
// ...
record.field('status').val('active');
sys.data.save(record);
// process webhook
// ...
record.lock(function(record) {
  record.field('status').val('active');
  sys.data.save(record);
);
如果其他线程同时尝试更新该记录,则会放置一个信号量