/**
  * {@inheritdoc}
  */
 public function execute(AMQPMessage $amqpMessage)
 {
     // Ack message and get event
     $amqpMessage->delivery_info['channel']->basic_ack($amqpMessage->delivery_info['delivery_tag']);
     /** @var Event $event */
     $event = $this->serializer->deserialize($amqpMessage->getBody(), 'Ndewez\\EventsBundle\\Model\\Event', 'json');
     // Process
     $this->listen->listen($event);
 }
 /**
  * @param AMQPMessage $message
  *
  * @return Request
  *
  * @throws \Exception
  */
 private function createRequest(AMQPMessage $message)
 {
     $topic = $message->delivery_info['routing_key'];
     $headers = $message->has('application_headers') ? $message->get('application_headers')->getNativeData() : [];
     $version = isset($headers['version']) ? $headers['version'] : null;
     $arguments = json_decode($message->getBody(), true);
     if (json_last_error() !== JSON_ERROR_NONE) {
         throw new EncodingException('Unable to decode request: ' . json_last_error_msg());
     }
     return new Request($topic, $version, $arguments, $headers);
 }
 /**
  * @param AMQPMessage $libMessage
  * @return Message
  * @throws \OutOfBoundsException
  */
 public function toMessage(AMQPMessage $libMessage)
 {
     $message = clone $this->getMessagePrototype();
     $message->setBody($libMessage->getBody());
     $message->setRoutingKey($libMessage->get($libMessage->has('routing_key') ? 'routing_key' : null));
     $message->setDeliveryTag($libMessage->has('delivery_tag') ? $libMessage->get('delivery_tag') : null);
     $message->setDeliveryMode($libMessage->has('delivery_mode') ? $libMessage->get('delivery_mode') : null);
     $message->setExchangeName($libMessage->has('exchange') ? $libMessage->get('exchange') : null);
     $message->setRedelivered($libMessage->has('redelivered') ? $libMessage->get('redelivered') : false);
     $message->setContentType($libMessage->has('content_type') ? $libMessage->get('content_type') : null);
     $message->setContentEncoding($libMessage->has('content_encoding') ? $libMessage->get('content_encoding') : null);
     $message->setType($libMessage->has('type') ? $libMessage->get('type') : null);
     $message->setDateTime($libMessage->has('timestamp') ? (new DateTime())->setTimestamp($libMessage->get('timestamp')) : null);
     $message->setPriority($libMessage->has('priority') ? $libMessage->get('priority') : null);
     $expiration = $libMessage->has('expiration') ? $libMessage->get('expiration') : null;
     $message->setExpiration(!empty($expiration) ? new \DateTime($libMessage->get('expiration')) : null);
     $message->setUserId($libMessage->has('user_id') ? $libMessage->get('user_id') : null);
     $message->setAppId($libMessage->has('app_id') ? $libMessage->get('app_id') : null);
     $message->setMessageId($libMessage->has('message_id') ? $libMessage->get('message_id') : null);
     $message->setReplyTo($libMessage->has('reply_to') ? $libMessage->get('reply_to') : null);
     $message->setCorrelationId($libMessage->has('correlation_id') ? $libMessage->get('correlation_id') : null);
     $message->setHeaders($libMessage->has('application_headers') ? $libMessage->get('application_headers') : []);
     return $message;
 }
 /**
  * @param AMQPReader $propertyReader
  * @param AMQPReader $contentReader
  * @return \PhpAmqpLib\Message\AMQPMessage
  */
 protected function createMessage($propertyReader, $contentReader)
 {
     $bodyChunks = array();
     $bodyReceivedBytes = 0;
     $message = new AMQPMessage();
     $message->load_properties($propertyReader)->setBodySize($contentReader->read_longlong());
     while (bccomp($message->getBodySize(), $bodyReceivedBytes, 0) == 1) {
         list($frame_type, $payload) = $this->next_frame();
         $this->validate_body_frame($frame_type);
         $bodyReceivedBytes = bcadd($bodyReceivedBytes, mb_strlen($payload, 'ASCII'), 0);
         if (is_int($this->maxBodySize) && $bodyReceivedBytes > $this->maxBodySize) {
             $message->setIsTruncated(true);
             continue;
         }
         $bodyChunks[] = $payload;
     }
     $message->setBody(implode('', $bodyChunks));
     $messageEncoding = $message->getContentEncoding();
     if ($this->auto_decode && !empty($messageEncoding)) {
         try {
             // Where does the decode() method come from if body is a string?
             $decodedBody = $message->getBody()->decode($messageEncoding);
             $message->setBody($decodedBody);
         } catch (\Exception $e) {
             $this->debug->debug_msg('Ignoring body decoding exception: ' . $e->getMessage());
         }
     }
     return $message;
 }
 /**
  * @param AMQPMessage $message
  *
  * @return Response
  *
  * @throws ReplyException
  */
 private function createResponse(AMQPMessage $message)
 {
     $headers = $message->has('application_headers') ? $message->get('application_headers')->getNativeData() : [];
     if (!empty($headers['x-error'])) {
         throw new ReplyException($headers['x-error'], isset($headers['x-error-code']) ? $headers['x-error-code'] : 0);
     }
     $type = $message->has('content_type') ? $message->get('content_type') : null;
     $value = $this->encoder->decode(new Encoded($type, $message->getBody()));
     return new Response($value, $headers);
 }
Exemple #6
0
 /**
  * Callback called in the consumer's callback that takes a callable $callback and runs it as a callback.
  *
  * @param           $message
  * @param  callable $callback
  * @return $callback
  */
 private function callback(AMQPMessage $message, callable $callback)
 {
     return $callback(new Message($message->getBody(), \DateTime::createFromFormat("U", $message->get('timestamp')), $message->getContentEncoding()));
 }
 /** {@inheritDoc} */
 public function publish(Message $message, $key = null)
 {
     $message = new AMQPMessage($message->getBody(), $message->getProperties());
     $this->channel->basic_publish($message, $this->exchange, (string) $key);
 }