/** * @dataProvider provideMessages * @test */ public function messagesGoThroughThePipeUnchanged($topic, $data) { $this->assertFalse($this->queue->dequeue()); $message = $this->queue->enqueue($topic, $data); $dequeued = $this->queue->dequeue(); $this->assertInstanceOf('Pekkis\\Queue\\Message', $dequeued); $this->assertEquals($message->getTopic(), $dequeued->getTopic()); $this->assertEquals($message->getData(), $dequeued->getData()); $this->queue->ack($dequeued); $this->assertFalse($this->queue->dequeue()); }
/** * @param callable $errorCallback * @return bool * @throws RuntimeException */ public function process(Closure $errorCallback = null) { if (!$errorCallback) { $errorCallback = function () { }; } try { $message = $this->queue->dequeue(); } catch (RuntimeException $e) { $errorCallback($this, $e); return false; } if (!$message) { $this->eventDispatcher->dispatch(Events::QUEUE_EMPTY); return false; } $this->eventDispatcher->dispatch(Events::MESSAGE_RECEIVE, new MessageEvent($message)); $result = $this->handleMessage($message); if (!$result) { $this->eventDispatcher->dispatch(Events::MESSAGE_NOT_HANDLABLE, new MessageEvent($message)); throw new RuntimeException(sprintf("No handler will handle a message of topic '%s'", $message->getTopic())); } if ($result->isSuccess()) { $this->queue->ack($message); } return true; }
/** * @test */ public function ackDelegates() { $message = Message::create('test-message', array('aybabtu' => 'lussentus')); $this->adapter->expects($this->once())->method('ack')->will($this->returnValue('luslus')); $this->assertSame('luslus', $this->queue->ack($message)); }
<?php namespace Pekkis\Queue\Example; use Pekkis\Queue\Adapter\IronMQAdapter; use Pekkis\Queue\Message; use Pekkis\Queue\Queue; require_once is_file(__DIR__ . '/bootstrap.php') ? __DIR__ . '/bootstrap.php' : __DIR__ . '/bootstrap.dist.php'; // Create a new IronMQ backed queue $queue = new Queue(new IronMQAdapter(IRONMQ_TOKEN, IRONMQ_PROJECT_ID, 'pekkis-queue-example')); // Queues can be emptied. $queue->purge(); // A message consists of a topic and data. A message instance with an UUID you can use is returned. $message = $queue->enqueue('pekkis.queue.example', array('some' => 'random data')); // Dequeue and process a single message $received = $queue->dequeue(); $data = $received->getData(); var_dump($data); // Acknowledge the message (you're done with it) $queue->ack($received);