/** * Deserialize job to be executed. * * @param string $message the json string * @return \UrbanIndo\Yii2\Queue\Job the job * @throws \yii\base\Exception if there is no route detected. */ protected function deserialize($message) { $job = $this->deserializeMessage($message); if (!isset($job['route'])) { throw new \yii\base\Exception('No route detected'); } $route = $job['route']; if (isset($job['type']) && $job['type'] == Job::TYPE_CALLABLE) { $type = Job::TYPE_CALLABLE; $serializer = new \SuperClosure\Serializer(); $route = $serializer->unserialize($route); } else { $type = Job::TYPE_REGULAR; } $data = \yii\helpers\ArrayHelper::getValue($job, 'data', []); return new Job(['route' => $route, 'data' => $data]); }
/** * Deserialize job to be executed. * * @param string $message The json string. * * @return Job The job. * @throws \yii\base\Exception If there is no route detected. */ protected function deserialize($message) { $job = $this->deserializeMessage($message); if (!isset($job['route'])) { throw new \yii\base\Exception('No route detected'); } $route = $job['route']; $signature = []; if (isset($job['type']) && $job['type'] == Job::TYPE_CALLABLE) { $serializer = new \SuperClosure\Serializer(); $signature['route'] = $route; $route = $serializer->unserialize($route); } $data = \yii\helpers\ArrayHelper::getValue($job, 'data', []); $obj = new Job(['route' => $route, 'data' => $data]); $obj->header['signature'] = $signature; return $obj; }
// First demo-job - print "date" to logs/command-pdo.log. $insertCronJobConfiguration->execute(['CommandExample', 'date', '* * * * *', 'logs/command-pdo.log']); // Second demo-job - a Closure which does some php::echo(). The Closure is saved to PDO-backend, too. $secondJobFn = function () { echo "I'm a function (" . date('Y-m-d H:i:s') . ')!' . PHP_EOL; return true; }; $serializer = new SuperClosure\Serializer(); $secondJobFnSerialized = $serializer->serialize($secondJobFn); $insertCronJobConfiguration->execute(['ClosureExample', $secondJobFnSerialized, '* * * * *', 'logs/closure-pdo.log']); /* * Examples are now set up, and saved to PDO-backend. * * Now, fetch all jobbies from PDO-backend and run them. */ $jobbiesStmt = $dbh->query("SELECT * FROM `{$dbhJobbiesTableName}`"); $jobbies = $jobbiesStmt->fetchAll(PDO::FETCH_ASSOC); $jobby = new \Jobby\Jobby(); foreach ($jobbies as $job) { // Filter out each value, which is not set (for example, "maxRuntime" is not defined in the job). $job = array_filter($job); try { $job['closure'] = $serializer->unserialize($job['command']); unset($job['command']); } catch (SuperClosure\Exception\ClosureUnserializationException $e) { } $jobName = $job['name']; unset($job['name']); $jobby->add($jobName, $job); } $jobby->run();