Пример #1
0
 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());
 }
Пример #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
  */
 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;
 }