Maison  >  Article  >  développement back-end  >  Cas (III) - KisFlow-Golang Stream Real - Application de KisFlow dans Multi-Goroutines

Cas (III) - KisFlow-Golang Stream Real - Application de KisFlow dans Multi-Goroutines

WBOY
WBOYoriginal
2024-07-16 07:23:18445parcourir

Case (III) - KisFlow-Golang Stream Real- Application of KisFlow in Multi-Cas (III) - KisFlow-Golang Stream Real - Application de KisFlow dans Multi-Goroutines

Github : https://github.com/aceld/kis-flow
Document : https://github.com/aceld/kis-flow/wiki


Part1-OverView
Partie2.1-Construction du projet / Modules de base
Partie2.2-Construction du projet / Modules de base
Partie 3-Flux de données
Planification des fonctions Part4
Partie 5-Connecteur
Partie 6-Importation et exportation de configuration
Part7-Action KisFlow
Part8-Cache/Params Mise en cache des données et paramètres de données
Partie 9-Copies multiples du flux
Part10-Statistiques des métriques Prometheus
Partie 11 - Enregistrement adaptatif des types de paramètres FaaS basé sur la réflexion


Cas 1 – Démarrage rapide
Opération parallèle Case2-Flow
Cas3-Application de KisFlow dans Multi-Cas (III) - KisFlow-Golang Stream Real - Application de KisFlow dans Multi-Goroutines
Case4-KisFlow dans les applications de file d'attente de messages (MQ)


Télécharger KisFlow Source

$go get github.com/aceld/kis-flow

Documentation du développeur KisFlow

Exemple de code source

https://github.com/aceld/kis-flow-usage/tree/main/6-flow_in_goroutines

Si vous avez besoin que le même Flow s'exécute simultanément dans plusieurs Cas (III) - KisFlow-Golang Stream Real - Application de KisFlow dans Multi-Goroutines, vous pouvez utiliser la fonction flow.Fork() pour cloner une instance Flow avec une mémoire isolée mais la même configuration. Chaque instance Flow peut ensuite être exécutée dans différentes Cas (III) - KisFlow-Golang Stream Real - Application de KisFlow dans Multi-Goroutines pour calculer leurs flux de données respectifs.

Cas (III) - KisFlow-Golang Stream Real - Application de KisFlow dans Multi-Goroutines

package main

import (
    "context"
    "fmt"
    "github.com/aceld/kis-flow/file"
    "github.com/aceld/kis-flow/kis"
    "sync"
)

func main() {
    ctx := context.Background()
    // Get a WaitGroup
    var wg sync.WaitGroup

    // Load Configuration from file
    if err := file.ConfigImportYaml("conf/"); err != nil {
        panic(err)
    }

    // Get the flow
    flow1 := kis.Pool().GetFlow("CalStuAvgScore")
    if flow1 == nil {
        panic("flow1 is nil")
    }
    // Fork the flow
    flowClone1 := flow1.Fork(ctx)

    // Add to WaitGroup
    wg.Add(2)

    // Run Flow1
    go func() {
        defer wg.Done()
        // Submit a string
        _ = flow1.CommitRow(`{"stu_id":101, "score_1":100, "score_2":90, "score_3":80}`)
        // Submit a string
        _ = flow1.CommitRow(`{"stu_id":1001, "score_1":100, "score_2":70, "score_3":60}`)

        // Run the flow
        if err := flow1.Run(ctx); err != nil {
            fmt.Println("err: ", err)
        }
    }()

    // Run FlowClone1
    go func() {
        defer wg.Done()
        // Submit a string
        _ = flowClone1.CommitRow(`{"stu_id":201, "score_1":100, "score_2":90, "score_3":80}`)
        // Submit a string
        _ = flowClone1.CommitRow(`{"stu_id":2001, "score_1":100, "score_2":70, "score_3":60}`)

        if err := flowClone1.Run(ctx); err != nil {
            fmt.Println("err: ", err)
        }
    }()

    // Wait for Cas (III) - KisFlow-Golang Stream Real - Application de KisFlow dans Multi-Goroutines to finish
    wg.Wait()

    fmt.Println("All flows completed.")

    return
}

func init() {
    // Register functions
    kis.Pool().FaaS("VerifyStu", VerifyStu)
    kis.Pool().FaaS("AvgStuScore", AvgStuScore)
    kis.Pool().FaaS("PrintStuAvgScore", PrintStuAvgScore)
}

Dans cet extrait de code, nous démarrons deux Cas (III) - KisFlow-Golang Stream Real - Application de KisFlow dans Multi-Goroutines pour exécuter Flow1 et son clone (FlowClone1) simultanément afin de calculer les scores moyens finaux des étudiants 101, 1001, 201 et 2001.


Auteur : Aceld
GitHub : https://github.com/aceld

Adresse du projet Open Source KisFlow : https://github.com/aceld/kis-flow

Document : https://github.com/aceld/kis-flow/wiki


Part1-OverView
Partie2.1-Construction du projet / Modules de base
Partie2.2-Construction du projet / Modules de base
Partie 3-Flux de données
Planification des fonctions Part4
Partie 5-Connecteur
Partie 6-Importation et exportation de configuration
Part7-Action KisFlow
Part8-Cache/Params Mise en cache des données et paramètres de données
Partie 9-Copies multiples du flux
Part10-Statistiques des métriques Prometheus
Partie 11 - Enregistrement adaptatif des types de paramètres FaaS basé sur la réflexion


Cas 1 – Démarrage rapide
Opération parallèle Case2-Flow
Cas3-Application de KisFlow dans Multi-Cas (III) - KisFlow-Golang Stream Real - Application de KisFlow dans Multi-Goroutines
Case4-KisFlow dans les applications de file d'attente de messages (MQ)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn