/** * @param EventMessageInterface $event * @param SerializerInterface $serializer * @return RedisEventRecord */ public static function fromMessage(EventMessageInterface $event, SerializerInterface $serializer) { $data = ['id' => $event->getId(), 'timestamp' => $event->getTimestamp(), 'payload_type' => $event->getPayloadType(), 'payload' => $serializer->serialize($event->getPayload()), 'metadata' => $serializer->serialize($event->getMetadata())]; if ($event instanceof DomainEventMessageInterface) { $data['aggregate'] = ['type' => $event->getAggregateType(), 'id' => $event->getAggregateId(), 'seq' => $event->getSequenceNumber()]; } return new self(json_encode($data)); }
/** * @param Callable $handler * @param EventMessageInterface $event * @throws \Exception */ private function invokeEventHandler(callable $handler, EventMessageInterface $event) { $handlerName = $this->getHandlerName($handler); $this->logger->debug(sprintf('Invoking event handler %s', $handlerName), ['event_id' => $event->getId(), 'event_type' => $event->getPayloadType()]); try { if ($event instanceof DomainEventMessageInterface) { $handler($event->getPayload(), $event->getMetadata(), $event->getTimestamp(), $event->getSequenceNumber(), $event->getAggregateId()); } else { $handler($event->getPayload(), $event->getMetadata(), $event->getTimestamp()); } } catch (\Exception $e) { $this->logger->error(sprintf('Uncaught Exception %s while handling Event %s: "%s" at %s line %s', get_class($e), $event->getPayloadType(), $e->getMessage(), $e->getFile(), $e->getLine()), ['exception' => $e, 'event_id' => $event->getId()]); if ($event->getPayload() instanceof EventExecutionFailed) { return; } $this->publish(new GenericEventMessage(new EventExecutionFailed($event, $e), $event->getMetadata())); throw $e; } }
/** * @param EventMessageInterface $event * @return array */ private function toArray(EventMessageInterface $event) { $dateTimeFormat = $this->connection->getDatabasePlatform()->getDateTimeFormatString(); $timestamp = $event->getTimestamp(); $data = ['event_id' => (string) $event->getId(), 'event_date' => $timestamp->format($dateTimeFormat), 'event_date_u' => $timestamp->format('u'), 'payload_type' => $event->getPayloadType(), 'payload' => $this->serializer->serialize($event->getPayload()), 'metadata' => $this->serializer->serialize($event->getMetadata())]; if ($event instanceof DomainEventMessageInterface) { $aggregateId = $event->getAggregateId(); if (!is_int($aggregateId)) { $aggregateId = (string) $aggregateId; } $data = array_merge($data, ['aggregate_type' => $event->getAggregateType(), 'aggregate_id' => $aggregateId, 'sequence_number' => $event->getSequenceNumber()]); } return $data; }