/**
  * @param IncomingPhysicalMessageContext $context
  * @param callable                       $next
  */
 public function invoke($context, callable $next)
 {
     $physicalMessage = $context->getMessage();
     $logicalMessage = $this->extractWithExceptionHandling($physicalMessage);
     if (!$logicalMessage) {
         throw new MessageDeserializationException($physicalMessage->getMessageId());
     }
     $next($this->incomingContextFactory->createLogicalMessageContext($logicalMessage, $context));
 }
Example #2
0
 /**
  * @param TransportReceiveContext $context
  * @param callable                $next
  *
  * @throws \Exception
  */
 public function invoke($context, callable $next)
 {
     $messageId = $context->getMessageId();
     $physicalMessageContext = $this->incomingContextFactory->createPhysicalMessageContext($context);
     $deduplicationEntry = $this->outboxStorage->get($messageId);
     $pendingTransportOperations = $physicalMessageContext->getPendingTransportOperations();
     if (!$deduplicationEntry) {
         $this->outboxStorage->beginTransaction();
         try {
             $next($physicalMessageContext);
             $outboxOperations = $this->operationsConverter->convertToOutboxOperations($pendingTransportOperations);
             $outboxMessage = new OutboxMessage($messageId, $outboxOperations);
             $this->outboxStorage->store($outboxMessage);
             $this->outboxStorage->commit();
         } catch (\Exception $e) {
             $this->outboxStorage->rollBack();
             throw $e;
         }
     } else {
         $pendingTransportOperations = $this->operationsConverter->convertToPendingTransportOperations($deduplicationEntry);
     }
     $this->dispatchPendingOperations($pendingTransportOperations, $physicalMessageContext);
     $this->outboxStorage->markAsDispatched($messageId);
 }