Mmoreram\RSQueueBundle\Services\Consumer::consume PHP Method

consume() public method

This method accepts a single queue alias or an array with alias Every new element will be popped from one of defined queue Also, new Consumer event is triggered everytime a new element is popped
public consume ( Mixed $queueAlias, integer $timeout ) : Mixed
$queueAlias Mixed Alias of queue to consume from ( Can be an array of alias )
$timeout integer Timeout. By default, 0
return Mixed payload unserialized
    public function consume($queueAlias, $timeout = 0)
    {
        $queues = is_array($queueAlias) ? $this->queueAliasResolver->getQueues($queueAlias) : $this->queueAliasResolver->getQueue($queueAlias);
        $payloadArray = $this->redis->blpop($queues, $timeout);
        if (empty($payloadArray)) {
            return array();
        }
        list($givenQueue, $payloadSerialized) = $payloadArray;
        $payload = $this->serializer->revert($payloadSerialized);
        $givenQueueAlias = $this->queueAliasResolver->getQueueAlias($givenQueue);
        /**
         * Dispatching consumer event...
         */
        $consumerEvent = new RSQueueConsumerEvent($payload, $payloadSerialized, $givenQueueAlias, $givenQueue, $this->redis);
        $this->eventDispatcher->dispatch(RSQueueEvents::RSQUEUE_CONSUMER, $consumerEvent);
        return array($givenQueueAlias, $payload);
    }

Usage Example

 /**
  * Tests consume method
  */
 public function testConsume()
 {
     $queueAlias = 'alias';
     $queue = 'queue';
     $timeout = 0;
     $payload = array('engonga');
     $redis = $this->getMock('\\Redis', array('blPop'));
     $redis->expects($this->once())->method('blPop')->with($this->equalTo($queue), $this->equalTo($timeout))->will($this->returnValue(array($queue, json_encode($payload))));
     $serializer = $this->getMock('Mmoreram\\RSQueueBundle\\Serializer\\JsonSerializer', array('revert'));
     $serializer->expects($this->once())->method('revert')->with($this->equalTo(json_encode($payload)))->will($this->returnValue($payload));
     $queueAliasResolver = $this->getMockBuilder('Mmoreram\\RSQueueBundle\\Resolver\\QueueAliasResolver')->setMethods(array('getQueue', 'getQueueAlias'))->disableOriginalConstructor()->getMock();
     $queueAliasResolver->expects($this->once())->method('getQueue')->with($this->equalTo($queueAlias))->will($this->returnValue($queue));
     $queueAliasResolver->expects($this->once())->method('getQueueAlias')->with($this->equalTo($queue))->will($this->returnValue($queueAlias));
     $eventDispatcher = $this->getMock('Symfony\\Component\\EventDispatcher\\EventDispatcher', array('dispatch'));
     $eventDispatcher->expects($this->once())->method('dispatch');
     $consumer = new Consumer($eventDispatcher, $redis, $queueAliasResolver, $serializer);
     list($givenQueueAlias, $givenPayload) = $consumer->consume($queueAlias, $timeout);
     $this->assertEquals($queueAlias, $givenQueueAlias);
     $this->assertEquals($payload, $givenPayload);
 }
Consumer