public function testInvoke()
 {
     $queue = $this->prophesize(Queue::class);
     $callable = $this->prophesize(ConsumerInterface::class);
     $libMessage = $this->prophesize(\AMQPEnvelope::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();
     $consumerCallback = new ConsumerCallback($callable->reveal(), $queue->reveal());
     $consumerCallback->setMessageMapper($messageMapper->reveal());
     $consumerCallback($libMessage->reveal());
 }
Beispiel #2
0
 /**
  * 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
  * @throws \AMQPChannelException
  * @throws \AMQPConnectionException
  */
 public function consume(callable $callback = null, $noLocal = false, $autoAck = false, $exclusive = false, $consumerTag = null)
 {
     $consumerCallback = null;
     if ($callback) {
         $consumerCallback = new ConsumerCallback($callback, $this);
         $consumerCallback->setMessageMapper($this->getMessageMapper());
     }
     $flags = AMQP_NOPARAM;
     if ($noLocal) {
         $flags |= AMQP_NOLOCAL;
     }
     if ($autoAck) {
         $flags |= AMQP_AUTOACK;
     }
     if ($exclusive) {
         $flags |= AMQP_EXCLUSIVE;
     }
     $this->getResource()->consume($consumerCallback, $flags, $consumerTag);
     return $this;
 }