public function setUp() { $this->mockQueueManager = $this->getMockBuilder(QueueManager::class)->disableOriginalConstructor()->getMock(); $this->testQueue = new TestQueue('TestQueue'); $this->mockQueueManager->expects($this->any())->method('getQueue')->with('TestQueue')->will($this->returnValue($this->testQueue)); $this->jobManager = new JobManager(); $this->inject($this->jobManager, 'queueManager', $this->mockQueueManager); }
/** * @test */ public function queueNamePrefixFromPresetCanBeOverruled() { $this->inject($this->queueManager, 'settings', ['presets' => ['somePreset' => ['queueNamePrefix' => 'presetPrefix']], 'queues' => ['TestQueue' => ['preset' => 'somePreset', 'queueNamePrefix' => 'overriddenPrefix', 'className' => TestQueue::class]]]); /** @var TestQueue $queue */ $queue = $this->queueManager->getQueue('TestQueue'); $this->assertSame('overriddenPrefixTestQueue', $queue->getName()); }
/** * Execute one job * * @param string $queue * @param string $serializedMessage An instance of Message serialized and base64-encoded * @return void * @internal This command is mainly used by the JobManager and FakeQueue in order to execute commands in sub requests */ public function executeCommand($queue, $serializedMessage) { /** @var Message $message */ $message = unserialize(base64_decode($serializedMessage)); $queue = $this->queueManager->getQueue($queue); $this->jobManager->executeJobForMessage($queue, $message); }
public function setUp() { parent::setUp(); $this->mockQueueManager = $this->getMockBuilder(QueueManager::class)->disableOriginalConstructor()->getMock(); $this->testQueue = new TestQueue('TestQueue'); $this->mockQueueManager->expects($this->any())->method('getQueue')->with('TestQueue')->will($this->returnValue($this->testQueue)); $this->mockQueueManager->expects($this->any())->method('getQueueSettings')->with('TestQueue')->will($this->returnCallback(function () { return $this->queueSettings; })); $this->jobManager = new JobManager(); $this->inject($this->jobManager, 'queueManager', $this->mockQueueManager); self::$bootstrap->getSignalSlotDispatcher()->connect(JobManager::class, 'messageSubmitted', $this, 'logSignal'); self::$bootstrap->getSignalSlotDispatcher()->connect(JobManager::class, 'messageTimeout', $this, 'logSignal'); self::$bootstrap->getSignalSlotDispatcher()->connect(JobManager::class, 'messageReserved', $this, 'logSignal'); self::$bootstrap->getSignalSlotDispatcher()->connect(JobManager::class, 'messageFinished', $this, 'logSignal'); self::$bootstrap->getSignalSlotDispatcher()->connect(JobManager::class, 'messageReleased', $this, 'logSignal'); self::$bootstrap->getSignalSlotDispatcher()->connect(JobManager::class, 'messageFailed', $this, 'logSignal'); }
/** * Submit a message to a given queue * * This command can be used to "manually" add messages to a given queue. * * <b>Example:</b> * <i>flow queue:submit some-queue "some payload" --options '{"delay": 14}'</i> * * To make this work with the <i>JobManager</i> the payload has to be a serialized * instance of an object implementing <i>JobInterface</i>. * * @param string $queue Name of the queue to submit a message to (e.g. "some-queue") * @param string $payload Arbitrary payload, for example a serialized instance of a class implementing JobInterface * @param string $options JSON encoded, for example '{"some-option": "some-value"}' * @return void */ public function submitCommand($queue, $payload, $options = null) { $queue = $this->queueManager->getQueue($queue); if ($options !== null) { $options = json_decode($options, true); } $messageId = $queue->submit($payload, $options !== null ? $options : []); $this->outputLine('<success>Submitted payload to queue "%s" with ID "%s".</success>', [$queue->getName(), $messageId]); }
/** * * @param string $queueName * @param integer $limit * @return JobInterface[] * @api */ public function peek($queueName, $limit = 1) { $queue = $this->queueManager->getQueue($queueName); $messages = $queue->peek($limit); return array_map(function (Message $message) { $job = unserialize($message->getPayload()); return $job; }, $messages); }