1、类型
Magento\Framework\Lock\Backend\Database
Magento\Framework\Lock\Backend\Zookeeper
Magento\Framework\Lock\Backend\Cache
Magento\Framework\Lock\Backend\FileLock
具体参考:vendor/magento/framework/Lock/LockBackendFactory.php
2、使用
$this->lockManager->lock(self::LOCK_PREFIX . $groupId, self::LOCK_TIMEOUT)
$this->lockManager->unlock(self::LOCK_PREFIX . $groupId);
eg:
private function tryRunJob($scheduledTime, $currentTime, $jobConfig, $schedule, $groupId)
{
// use sha1 to limit length
// phpcs:ignore Magento2.Security.InsecureFunction
$lockName = self::LOCK_PREFIX . md5($groupId . '_' . $schedule->getJobCode());
try {
for ($retries = self::MAX_RETRIES; $retries > 0; $retries--) {
if ($this->lockManager->lock($lockName, 0) && $schedule->tryLockJob()) {
$this->_runJob($scheduledTime, $currentTime, $jobConfig, $schedule, $groupId);
break;
}
}
} catch (\Exception $e) {
//
} finally {
$this->lockManager->unlock($lockName);
}
}