/** * @inheritdoc */ public function dispatch($message, $sender = null) { if ($message instanceof RemoteMessage) { $message = $this->getToProcessingMessageTranslator()->translateToProcessingMessage($message); } if (!$message instanceof ProcessingMessage) { throw new \InvalidArgumentException(sprintf('Message can not be dispatched. Unknown type provided: %s', is_object($message) ? get_class($message) : gettype($message))); } $channelGetter = null; if (MessageNameUtils::isProcessingCommand($message->messageName())) { $channelGetter = "getCommandChannelFor"; } if (MessageNameUtils::isProcessingEvent($message->messageName())) { $channelGetter = "getEventChannelFor"; } if (MessageNameUtils::isProcessingLogMessage($message->messageName())) { $channelGetter = "getEventChannelFor"; } if (StartSubProcess::MSG_NAME === $message->messageName()) { $channelGetter = "getCommandChannelFor"; } if (SubProcessFinished::MSG_NAME === $message->messageName()) { $channelGetter = "getEventChannelFor"; } if (is_null($channelGetter)) { throw new \InvalidArgumentException(sprintf('Channel detection for message %s was not possible', $message->messageName())); } /** @var $channelBus CommandBus|EventBus */ $channelBus = $this->{$channelGetter}($message->target(), $message->origin(), $sender); $channelBus->dispatch($message); }
/** * @param RemoteMessage $message * @return LogMessage|WorkflowMessage|StartSubProcess|SubProcessFinished * @throws \InvalidArgumentException */ public function translateToProcessingMessage(RemoteMessage $message) { if (MessageNameUtils::isWorkflowMessage($message->name())) { return WorkflowMessage::fromServiceBusMessage($message); } else { if (MessageNameUtils::isProcessingLogMessage($message->name())) { return LogMessage::fromServiceBusMessage($message); } else { if (StartSubProcess::MSG_NAME === $message->name()) { return StartSubProcess::fromServiceBusMessage($message); } else { if (SubProcessFinished::MSG_NAME === $message->name()) { return SubProcessFinished::fromServiceBusMessage($message); } } } } throw new \InvalidArgumentException(sprintf('Message with name %s can not be translated. Unknown type provided.', $message->name())); }
/** * @return WorkflowMessage|LogMessage * @throws \RuntimeException */ public function lastMessage() { $sbMessage = RemoteMessage::fromArray($this->payload['last_message']); if (MessageNameUtils::isProcessingLogMessage($sbMessage->name())) { return LogMessage::fromServiceBusMessage($sbMessage); } if (MessageNameUtils::isWorkflowMessage($sbMessage->name())) { return WorkflowMessage::fromServiceBusMessage($sbMessage); } throw new \RuntimeException(sprintf("Sub process %s has received last a message with name %s that has no known message format", $this->processorNodeName() . '::' . $this->subProcessId(), $sbMessage->name())); }
/** * @test */ public function it_detects_processing_log_message_by_name() { $this->assertTrue(MessageNameUtils::isProcessingLogMessage(MessageNameUtils::LOG_MESSAGE_NAME)); $this->assertFalse(MessageNameUtils::isProcessingLogMessage('processing-message-proophprocessingTestmockuserdictionary-process-data')); }