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;
    }