/** * @param AMQPMessage $message * @return mixed * @throws \OutOfBoundsException */ public function __invoke(AMQPMessage $message) { $convertedMessage = $this->getMessageMapper()->toMessage($message); $ret = call_user_func($this->callback, $convertedMessage, $this->queue); if (false === $ret) { $this->queue->cancel($message->delivery_info['consumer_tag']); } return $ret; }
/** * @dataProvider consumeProvider */ public function testConsume($args, $libArgs) { $adapterChannel = $this->prophesize(AMQPChannel::class); $channel = $this->prophesize(Channel::class); $options = $this->getDefaultOptionsProphet(); $libMessage = $this->prophesize(AMQPMessage::class); $messageMapper = $this->prophesize(MessageMapper::class); $adapterChannel->basic_consume('queueName', $libArgs[3], $libArgs[0], $libArgs[1], $libArgs[2], false, Argument::type(ConsumerCallback::class))->shouldBeCalled()->willReturn($libMessage->reveal()); $adapterChannel->callbacks = ['foo', 'bar']; $adapterChannel->wait()->shouldBeCalledTimes(count($adapterChannel->callbacks))->will(function () use($adapterChannel) { $callbacks = $adapterChannel->callbacks; array_shift($callbacks); $adapterChannel->callbacks = $callbacks; }); $channel->getResource()->willReturn($adapterChannel->reveal()); $queue = new Queue(); $queue->setOptions($options->reveal()); $queue->setChannel($channel->reveal()); $queue->setMessageMapper($messageMapper->reveal()); $callback = function () { }; $ret = $queue->consume($callback, $args[0], $args[1], $args[2], $args[3]); static::assertSame($queue, $ret); }