Esempio n. 1
0
 /**
  * Асинхронный вызов
  * @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;
 }