public function testOnJobPopPopsTriggersIdleAndStopPropagation() { $this->event->getQueue()->expects($this->once())->method('pop')->will($this->returnValue(null)); $called = false; $this->event->getTarget()->getEventManager()->attach(WorkerEvent::EVENT_PROCESS_IDLE, function (WorkerEvent $e) use(&$called) { $called = true; }); $this->listener->onJobPop($this->event); $this->assertTrue($called); $this->assertNull($this->event->getJob()); $this->assertEquals(WorkerEvent::JOB_STATUS_UNKNOWN, $this->event->getResult()); $this->assertTrue($this->event->propagationIsStopped()); }
/** * @param WorkerEvent $e * @return void */ public function onJobProcess(WorkerEvent $e) { $job = $e->getJob(); $queue = $e->getQueue(); /** @var AbstractWorker $worker */ $worker = $e->getTarget(); $result = $worker->processJob($job, $queue); $e->setResult($result); }
/** * @param WorkerEvent $e * @throws \SlmQueue\Exception\RuntimeException */ public function attachQueueListeners(WorkerEvent $e) { /** @var AbstractWorker $worker */ $worker = $e->getTarget(); $name = $e->getQueue()->getName(); $eventManager = $worker->getEventManager(); $eventManager->detachAggregate($this); if (!isset($this->strategyConfig[$name])) { $name = 'default'; // We want to make sure the default process queue is always attached } $strategies = $this->strategyConfig[$name]; foreach ($strategies as $strategy => $options) { // no options given, name stored as value if (is_numeric($strategy) && is_string($options)) { $strategy = $options; $options = array(); } if (!is_string($strategy) || !is_array($options)) { continue; } $priority = null; if (isset($options['priority'])) { $priority = $options['priority']; unset($options['priority']); } $listener = $this->pluginManager->get($strategy, $options); if (!is_null($priority)) { $eventManager->attachAggregate($listener, $priority); } else { $eventManager->attachAggregate($listener); } } if (!in_array(WorkerEvent::EVENT_PROCESS_QUEUE, $eventManager->getEvents())) { throw new RuntimeException(sprintf( "No worker strategy has been registered to respond to the '%s' event.", WorkerEvent::EVENT_PROCESS_QUEUE )); } $e->stopPropagation(); $eventManager->trigger(WorkerEvent::EVENT_BOOTSTRAP, $e); }
public function testWorkerEventHoldsStateForQueue() { $event = new WorkerEvent($this->worker, $this->queue); $this->assertEquals($this->queue, $event->getQueue()); }