Exemple #1
0
 function receiveMessage($queue)
 {
     while (true) {
         if (Redis::setnx('cinnamon-lock-' . $queue, 1)) {
             Redis::expire('cinnamon-lock-' . $queue, 1);
             $return = Redis::zrange('cinnamon-queue-' . $queue, 0, 1);
             if (isset($return[0])) {
                 $return = $return[0];
                 if ($return) {
                     Redis::zrem('cinnamon-queue-' . $queue, $return);
                 }
             } else {
                 $return = null;
             }
             Redis::del('cinnamon-lock-' . $queue);
             try {
                 if ($return) {
                     return json_decode($return, true);
                 }
             } catch (Exception $e) {
                 continue;
             }
             return null;
         }
         usleep(20000);
     }
     return null;
 }
Exemple #2
0
use Framework\Config;
use Framework\Queue\Driver\RedisDriver;
use Framework\Exception\FrameworkException;
use Framework\Queue\QueueProcessor;
use Framework\Input;
use Framework\Route;
use Framework\Queue\Driver\Driver;
$r = Redis::getInstance();
if (!isset($argv[1])) {
    return;
}
$ip = $argv[1];
$process = $r->get('cinnamon-process-' . $ip);
if ($process == null) {
    Redis::set('cinnamon-process-' . $ip, date('U'));
    Redis::expire('cinnamon-process-' . $ip, 1200);
    try {
        if (!$rs instanceof Driver) {
            throw FrameworkException::internalError('Queue Driver Not Set');
        }
        QueueProcessor::getInstance()->setDriver($rs)->setAsReceiver();
        $message = $rs->receiveMessage('route');
        if (!$message) {
            continue;
        }
        Input::bind($message);
        Route::reset();
        Route::setSkipMain();
        include __APP__ . "/route.php";
        $r->subscribe('cinnamon-process', function ($message, $channel) use($r) {
            $tasks = $r->zrange('cinnamon-queue-' . $channel, 0, 10);