public static function init(Di $di, $defaultTube = 'default') { $config = $di->get('config'); if (!isset($config->queue)) { return; } $params = (array) $config->queue; $di->setShared(self::SERVICE_NAME, function () use($params, $defaultTube) { $beanstalk = new Beanstalk($params); $beanstalk->choose($defaultTube); return $beanstalk; }); }
#!/usr/bin/env php <?php use Phalcon\Queue\Beanstalk; use Phalcon\Queue\Beanstalk\Job; use Phalcon\DI; use SlowProg\Mailer\MailerService; // Подключаем конфиг приложения (исправить на свой) $config = (require __DIR__ . '/app/config/config.php'); $di = new DI(); $di->set('config', $config); $queue = new Beanstalk(); $queue->choose('mailer'); $di['queue'] = $queue; /** * Register Mailer Service */ $di['mailer'] = function () { $service = new MailerService(); return $service->mailer(); }; /** @var Job $job */ while (($job = $queue->peekReady()) !== false) { $data = json_decode($job->getBody(), true); $segments = explode(':', $data['job']); if (count($segments) !== 2) { continue; } call_user_func_array([$di[$segments[0]], $segments[1]], [$job, $data['data']]); }
public function choose($tube) { return parent::choose($tube); }
/** * Queue a new e-mail message for sending * * @param string|array $view * @param array $data * @param \Closure|string $callback * * @return mixed */ public function queue($view, array $data, $callback) { $callback = $this->buildQueueCallable($callback); $this->queue->choose('mailer'); return $this->queue->put(json_encode(['job' => 'mailer:handleQueuedMessage', 'data' => ['view' => $view, 'data' => $data, 'callback' => $callback]])); }