예제 #1
0
 /**
  * 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]);
 }
예제 #2
0
 /**
  * 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;
 }
예제 #3
0
// 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();