public function testInvokeWithCancel() { $queue = $this->prophesize(Queue::class); $callable = $this->prophesize(ConsumerInterface::class); $libMessage = $this->prophesize(AMQPMessage::class); $message = $this->prophesize(Message::class); $messageMapper = $this->prophesize(MessageMapper::class); $messageMapper->toMessage($libMessage->reveal())->shouldBeCalled()->willReturn($message); $callable->__invoke($message->reveal(), $queue->reveal())->shouldBeCalled()->willReturn(false); $libMessage->delivery_info = ['consumer_tag' => 'foo']; $queue->cancel('foo')->shouldBeCalled(); $consumerCallback = new ConsumerCallback($callable->reveal(), $queue->reveal()); $consumerCallback->setMessageMapper($messageMapper->reveal()); $consumerCallback($libMessage->reveal()); }
/** * Consume messages from a queue (blocking function). * * @param callback|ConsumerInterface|null $callback A callback function to which the * consumed message will be passed. * @param bool $noLocal * @param bool $autoAck * @param bool $exclusive * @param string $consumerTag A string describing this consumer. Used * for canceling subscriptions with cancel(). * @return $this */ public function consume(callable $callback = null, $noLocal = false, $autoAck = false, $exclusive = false, $consumerTag = null) { if (null === $consumerTag) { $consumerTag = ''; } $queue = $this->getOptions()->getName(); $consumerCallback = null; if ($callback) { $consumerCallback = new ConsumerCallback($callback, $this); $consumerCallback->setMessageMapper($this->getMessageMapper()); } $this->channel->getResource()->basic_consume($queue, $consumerTag, $noLocal, $autoAck, $exclusive, false, $consumerCallback); while (count($this->channel->getResource()->callbacks)) { $this->channel->getResource()->wait(); } return $this; }