public function call($value)
{
$this->response = NULL;
$this->corrId = uniqid();
try {
//Declare an nonymous channel
$this->queue = new AMQPQueue($this->channel);
$this->queue->setFlags(AMQP_EXCLUSIVE);
$this->queue->declareQueue();
$this->callbackQueueName = $this->queue->getName();
//Set Publish Attributes
$attributes = ['correlation_id' => $this->corrId, 'reply_to' => $this->callbackQueueName];
$this->exchange->publish($value, $this->rpcQueue, AMQP_NOPARAM, $attributes);
$callback = function (AMQPEnvelope $message, AMQPQueue $q) {
if ($message->getCorrelationId() == $this->corrId) {
//echo sprintf("CorrelationID: %s",$message->getCorrelationId()), PHP_EOL;
//echo sprintf("Response: %s",$message->getBody()), PHP_EOL;
$this->response = $message->getBody();
$q->nack($message->getDeliveryTag());
return false;
}
};
$this->queue->consume($callback);
//Return RPC Results
return $this->response;
} catch (AMQPQueueException $ex) {
print_r($ex);
} catch (Exception $ex) {
print_r($ex);
}
}