/** * Асинхронный вызов * @param $service * @param $message * @param bool $transactionId * @return bool|string * @throws \Exception */ public function asyncCall($service, $message, $transactionId = false) { if (is_array($message) || is_object($message)) { $message = Json::encode($message); } if (empty($transactionId)) { $transactionId = $this->amqp->newTransactionId(); } $chanel = $this->amqp->newChannel(); //<editor-fold desc="Создаем временную очередь ответов"> $queue = new \AMQPQueue($chanel); $queue->setName($transactionId); // Очередь удалиться когда опустеет $queue->setFlags(AMQP_AUTODELETE); $queue->declareQueue(); //</editor-fold> //<editor-fold desc="Отправляем запрос на обработку"> // Точка доступа $exchange = new \AMQPExchange($chanel); $attributes = array('reply_to' => $transactionId); if (!$exchange->publish($message, $service, AMQP_NOPARAM, $attributes)) { throw new \Exception('Exchange publish error'); } //</editor-fold> return $transactionId; }