/** * Add a request to rpc client * * @param string $msgBody * @param string $server * @param string $requestId * @param string $routingKey * @param int $expiration * @throws Exception\InvalidArgumentException */ public function addRequest($msgBody, $server, $requestId, $routingKey = '', $expiration = 0) { if (empty($requestId)) { throw new Exception\InvalidArgumentException('You must provide a request Id'); } $params = compact('msgBody', 'server', 'requestId', 'routingKey', 'expiration'); $results = $this->getEventManager()->trigger(__FUNCTION__, $this, $params); $result = $results->last(); if (is_array($result)) { $msgBody = $result['msgBody']; $server = $result['server']; $requestId = $result['requestId']; $routingKey = $result['routingKey']; $expiration = $result['expiration']; } $messageAttributes = new MessageAttributes(); $messageAttributes->setReplyTo($this->queue->getName()); $messageAttributes->setDeliveryMode(MessageAttributes::DELIVERY_MODE_NON_PERSISTENT); $messageAttributes->setCorrelationId($requestId); if (0 != $expiration) { $messageAttributes->setExpiration($expiration * 1000); } $exchange = $this->getExchange($server); $exchange->publish($msgBody, $routingKey, $messageAttributes->getFlags(), $messageAttributes->toArray()); $this->requests++; if ($expiration > $this->timeout) { $this->timeout = $expiration; } }