/** * @param InputInterface $input * @param OutputInterface $output */ protected function execute(InputInterface $input, OutputInterface $output) { $queueName = $input->getArgument("queueName"); /* Listen to queue */ $broker = new Broker(); $broker->listenToQueue($queueName, array("\\RabbitManager\\Handlers\\" . $queueName . "Handler")); }
/** * */ public function testBroker() { $broker = new Broker(); $msg = new Message('TestQueue', array("test_param" => "I am a test param", "test_mesage" => "I am a test message")); $broker->sendMessage($msg); $messageCount = $broker->getStatus($msg) + 1; echo "Messages in queue : " . $messageCount . "\n"; }
/** * @param InputInterface $input * @param OutputInterface $output * @return bool */ protected function execute(InputInterface $input, OutputInterface $output) { $queueName = $input->getArgument("queueName"); $message = $input->getArgument("message"); $broker = new Broker(); /* Makes the AMPQ message */ $msg = new Message($queueName, ["message" => $message]); /* Sends the message */ $broker->sendMessage($msg); $output->writeln('<info>Successfully submitted in queue</info>'); }
/** * Starts to listen a queue for incoming messages. * @param string $queueName The AMQP queue * @param array $handlers Array of handler class instances * @return bool */ public function listenToQueue($queueName, array $handlers) { $this->queueName = $queueName; /* Look for handlers */ $handlersMap = array(); foreach ($handlers as $handlerClassPath) { if (!class_exists($handlerClassPath)) { $handlerClassPath = "RabbitManager\\Handlers\\{$handlerClassPath}"; if (!class_exists($handlerClassPath)) { $this->logger->addError("Class {$handlerClassPath} was not found!"); return false; } } $handlerOb = new $handlerClassPath(); $classPathParts = explode("\\", $handlerClassPath); $handlersMap[$classPathParts[count($classPathParts) - 1]] = $handlerOb; } /* Create queue */ $this->channel->queue_declare($queueName, false, true, false, false); /* Start consuming */ $this->channel->basic_qos(null, 1, null); $this->channel->basic_consume($queueName, '', false, false, false, false, function ($amqpMsg) use($handlersMap) { $msg = Message::fromAMQPMessage($amqpMsg); Broker::handleMessage($msg, $handlersMap); }); $this->logger->addInfo("Starting consumption of queue {$queueName}"); /* Iterate until ctrl+c is received... */ while (count($this->channel->callbacks)) { $this->channel->wait(); } }