|
| 1 | +<?php |
| 2 | + |
| 3 | +require __DIR__ . '/../vendor/autoload.php'; |
| 4 | + |
| 5 | +class CsvReport |
| 6 | +{ |
| 7 | + public function handle(string $format, string $email) |
| 8 | + { |
| 9 | + echo 'handled '.$format.' sent to '.$email.PHP_EOL; |
| 10 | + } |
| 11 | +} |
| 12 | + |
| 13 | +$queue = new Queue\ArrayQueue; |
| 14 | +$queue->setChannel('reports'); |
| 15 | + |
| 16 | +$queue->push(new Queue\Job(CsvReport::class, ['csv', 'bob@acme.com'])); |
| 17 | +$queue->push(new Queue\Job(CsvReport::class, ['xml', 'bill@acme.com'])); |
| 18 | +$queue->push(new Queue\Job(CsvReport::class, ['pdf', 'baz@acme.com'])); |
| 19 | +$queue->push(new Queue\Job(CsvReport::class, ['jpg', 'ben@acme.com'])); |
| 20 | + |
| 21 | +$handler = function (string $message) use ($queue) { |
| 22 | + $job = Queue\Job::parse($message); |
| 23 | + |
| 24 | + echo PHP_EOL; |
| 25 | + echo 'Received job'.PHP_EOL; |
| 26 | + echo 'Attempts: '.$job->getAttempts().PHP_EOL; |
| 27 | + echo 'Status: '.$job->getStatus().PHP_EOL; |
| 28 | + echo 'Task: '.$job->getTask().PHP_EOL; |
| 29 | + |
| 30 | + if ($job->getAttempts() > 3) { |
| 31 | + echo 'Received failed'.PHP_EOL; |
| 32 | + return; |
| 33 | + } |
| 34 | + |
| 35 | + if ($job->getStatus() == $job::STATUS_PENDING && $job->getArgs()[0] == 'pdf') { |
| 36 | + $job->failing(); |
| 37 | + return $queue->push($job); |
| 38 | + } |
| 39 | + |
| 40 | + if ($job->getStatus() == $job::STATUS_FAILING) { |
| 41 | + $job->retry(); |
| 42 | + return $queue->push($job); |
| 43 | + } |
| 44 | + |
| 45 | + [$class, $method] = explode('@', $job->getTask(), 2); |
| 46 | + |
| 47 | + $ref = new ReflectionClass($class); |
| 48 | + $ref->getMethod($method)->invokeArgs(new $class, $job->getArgs()); |
| 49 | +}; |
| 50 | + |
| 51 | +$worker = new Queue\Worker($queue, $handler, 4); |
| 52 | +$worker->run(); |
0 commit comments