/** * @param OutboxMessage $message * * @return array */ public function toDatabaseArray(OutboxMessage $message) { $transportOperations = []; foreach ($message->getTransportOperations() as $transportOperation) { $transportOperations[] = ['message_id' => $transportOperation->getMessageId(), 'body' => $transportOperation->getBody(), 'headers' => $transportOperation->getHeaders(), 'options' => $transportOperation->getOptions()]; } return ['message_id' => $message->getMessageId(), 'transport_operations' => json_encode($transportOperations)]; }
/** * @param OutboxMessage $outboxMessage * * @return PendingTransportOperations */ public function convertToPendingTransportOperations(OutboxMessage $outboxMessage) { $transportOperations = new PendingTransportOperations(); foreach ($outboxMessage->getTransportOperations() as $outboxOperation) { $transportOperations->add(new TransportOperation(new OutgoingPhysicalMessage($outboxOperation->getMessageId(), $outboxOperation->getHeaders(), $outboxOperation->getBody()), $this->deserializeAddressTag($outboxOperation->getOptions()))); } return $transportOperations; }
/** * Stores the message to enable deduplication and re-dispatching of transport operations. * Throws an exception if a message with the same ID already exists. * * @param OutboxMessage $message * * @return void */ public function store(OutboxMessage $message) { $messageId = $message->getMessageId(); if (isset($this->messages[$messageId])) { throw new InvalidArgumentException("Outbox message with ID '{$messageId}' already exists in storage."); } $this->messages[$messageId] = new InMemoryStoredMessage($messageId, $message->getTransportOperations()); $this->lastMessageId = $messageId; }