/** * @throws AMQPServerException|AMQPServerConnectionException * @return integer - the message count in queue **/ public function queueDeclare($name, AMQPQueueConfig $conf) { $this->checkConnection(); try { $this->queueList[$name] = new AMQPQueue($this->transport->getLink()); $obj = $this->queueList[$name]; $result = $obj->declare($name, $conf->getBitmask(new AMQPPeclQueueBitmask())); } catch (AMQPQueueException $e) { throw new AMQPServerException($e->getMessage(), $e->getCode(), $e); } $this->checkCommandResult(is_int($result), "Could not declare queue"); return $result; }
/** * @throws AMQPServerException|AMQPServerConnectionException * @return integer - the message count in queue **/ public function queueDeclare($name, AMQPQueueConfig $conf) { $this->checkConnection(); try { if (isset($this->queueList[$name])) { unset($this->queueList[$name]); } $this->queueList[$name] = new AMQPQueue($this->getChannelLink()); $obj = $this->queueList[$name]; $obj->setName($name); $obj->setFlags($conf->getBitmask(new AMQPPeclQueueBitmask())); $obj->setArguments($conf->getArguments()); $result = $obj->declare(); } catch (Exception $e) { $this->clearConnection(); throw new AMQPServerException($e->getMessage(), $e->getCode(), $e); } $this->checkCommandResult(is_int($result), "Could not declare queue"); return $result; }
public function testQueueConsumer() { $c = new AMQPPecl(AMQPCredentials::createDefault()); $channel = $c->createChannel(1); $channel->exchangeDeclare(self::EXCHANGE_NAME, AMQPExchangeConfig::create()->setType(new AMQPExchangeType(AMQPExchangeType::DIRECT))->setDurable(true)); $inQueueCount = $channel->queueDeclare(self::QUEUE_NAME, AMQPQueueConfig::create()->setDurable(true)); $this->assertSame(0, $inQueueCount); $channel->queueBind(self::QUEUE_NAME, self::EXCHANGE_NAME, self::ROUTING_KEY); //cleanup $channel->queuePurge(self::QUEUE_NAME); for ($i = 1; $i <= self::COUNT_OF_PUBLISH; $i++) { $channel->basicPublish(self::EXCHANGE_NAME, self::ROUTING_KEY, AMQPOutgoingMessage::create()->setBody("message {$i}")->setTimestamp(Timestamp::makeNow())->setAppId(__CLASS__)->setMessageId($i)->setContentEncoding('utf-8')); } $consumer = new AMQPTestCaseQueueConsumer($channel); $channel->basicConsume(self::QUEUE_NAME, false, $consumer); $i = 0; while (true) { $message = $consumer->getNextDelivery(); //send acknowledge to RabbitMQ $channel->basicAck($message->getDeliveryTag(), false); $i++; $this->assertSame($consumer->getConsumerTag(), $message->getConsumerTag()); $this->assertEquals($i, $message->getMessageId()); $this->assertEquals(__CLASS__, $message->getAppId()); $this->assertEquals("message {$i}", $message->getBody()); if ($i == self::COUNT_OF_PUBLISH) { break; } } $channel->basicCancel($consumer->getConsumerTag()); //observer logic test $this->assertSame('ABBBBBC', $consumer->getCheckString()); //drop channels and close connection $c->disconnect(); $c = new AMQPPecl(AMQPCredentials::createDefault()); $channel = $c->createChannel(1); $channel->exchangeDeclare(self::EXCHANGE_NAME, AMQPExchangeConfig::create()->setType(new AMQPExchangeType(AMQPExchangeType::DIRECT))->setDurable(true)); //queue must be empty, because we sent acknowledge $inQueueCount = $channel->queueDeclare(self::QUEUE_NAME, AMQPQueueConfig::create()->setDurable(true)); $this->assertSame(0, $inQueueCount); //cleanup $channel->queuePurge(self::QUEUE_NAME); }
/** * @param AMQPChannelInterface $channel * @param string $label * @return int */ protected function queueDeclare(AMQPChannelInterface $channel, $label) { $this->assertTrue(isset(self::$queueList[$label])); return $channel->queueDeclare(self::$queueList[$label]['name'], AMQPQueueConfig::create()->setDurable(true)->setArguments(self::$queueList[$label]['args'])); }