/** * Determine the required process type based on given message and the message handler which will receive the message. * * @param Message $message * @param MessageHandler $messageHandler * @return ProcessType * @throws Workflow\Exception\MessageIsNotManageable */ private function determineProcessType(Message $message, MessageHandler $messageHandler) { if ($messageHandler->canHandleMessage($message)) { if ($message->processingMetadata()->shouldCollectionBeSplitIntoChunks()) { $processType = ProcessType::parallelChunk(); } else { $processType = ProcessType::linearMessaging(); } } else { //We create the error before trying the foreach alternative to provide the client with the original error message //if the alternative fails too. $originalError = MessageIsNotManageable::byMessageHandler($messageHandler, $message); //Check if we can use a foreach process to avoid the rejection of the message if ($this->isForeachProcessPossible($message, $messageHandler)) { $processType = ProcessType::parallelForeach(); } else { throw $originalError; } } return $processType; }
/** * @test */ function it_can_be_a_parallel_for_each_type() { $type = ProcessType::parallelForeach(); $this->assertTrue($type->isParallelForeach()); $this->assertEquals(ProcessType::TYPE_PARALLEL_FOREACH, $type->toString()); }