public function run()
    {
        if ($job = $this->pop()) {
            list($route, $payload, $execution) = $job;
            $result = $this->runJob($route, $payload);
            if ($result === false) {
                if ($execution > 1) {
                    $this->push($route, $payload, 0, $execution - 1);
                } else {
                    $this->trigger(self::EVENT_FAIL, new Event(['route' => $route, 'payload' => $payload]));
                }
            }
            return $result !== false;
        }
    }