lockFactory = $lockFactory; $this->interval = $interval; $this->dateTime = $dateTime; parent::__construct($context, $connectionName); } /** * {@inheritDoc} */ protected function _construct() { $this->_init(self::QUEUE_LOCK_TABLE, 'id'); } /** * {@inheritDoc} */ public function read(\Magento\Framework\MessageQueue\LockInterface $lock, $code) { $object = $this->lockFactory->create(); $object->load($code, 'message_code'); $lock->setId($object->getId()); $lock->setMessageCode($object->getMessageCode() ?: $code); $lock->setCreatedAt($object->getCreatedAt()); } /** * {@inheritDoc} */ public function saveLock(\Magento\Framework\MessageQueue\LockInterface $lock) { $object = $this->lockFactory->create(); $object->setMessageCode($lock->getMessageCode()); $object->setCreatedAt($this->dateTime->gmtTimestamp()); $object->save(); } /** * {@inheritDoc} */ public function releaseOutdatedLocks() { $date = (new \DateTime())->setTimestamp($this->dateTime->gmtTimestamp()); $date->add(new \DateInterval('PT' . $this->interval . 'S')); $this->getConnection()->delete($this->getTable(self::QUEUE_LOCK_TABLE), ['created_at <= ?' => $date]); } }