/** * @test delivery is created from envelope properties */ public function deliveryFromEnvelope() { $properties = ['deliveryTag' => 'tag-value', 'exchangeName' => 'exchange.name', 'routingKey' => 'routing.key']; $envelope = $this->createEnvelope($properties); $envelope->expects($this->any())->method('isRedelivery')->will($this->returnValue(true)); $delivery = PeclMessageUtils::createDelivery($envelope, 'query'); $this->assertEquals($properties['deliveryTag'], $delivery->getTag()); $this->assertEquals($properties['exchangeName'], $delivery->getExchange()); $this->assertEquals($properties['routingKey'], $delivery->getRoutingKey()); $this->assertTrue($delivery->isRedelivered()); $this->assertEquals('query', $delivery->getQueue()); }
/** * {@inheritDoc} */ public function consume($queue, callable $callback, $timeout) { $oldTimeout = $this->connection->getReadTimeout(); $this->connection->setReadTimeout($timeout); try { $this->getQueue($queue)->consume(function (\AMQPEnvelope $envelope) use($callback, $queue) { return call_user_func($callback, PeclMessageUtils::createDelivery($envelope, $queue)); }); $this->connection->setReadTimeout($oldTimeout); $this->closeChannel(); } catch (\AMQPConnectionException $e) { $this->connection->setReadTimeout($oldTimeout); $expectedErrors = array('interrupted system call', 'resource temporarily unavailable'); foreach ($expectedErrors as $expectedError) { if (stripos($e->getMessage(), $expectedError) !== false) { return; } } throw new DriverException('Unexpected error while consuming', $e); } }