/** * {@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); }
/** * 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); }