Heim > Backend-Entwicklung > Golang > Fall (III) – KisFlow-Golang Stream Real – Anwendung von KisFlow in Multi-Goroutinen

Fall (III) – KisFlow-Golang Stream Real – Anwendung von KisFlow in Multi-Goroutinen

WBOY
Freigeben: 2024-07-16 07:23:18
Original
537 Leute haben es durchsucht

Case (III) - KisFlow-Golang Stream Real- Application of KisFlow in Multi-Fall (III) – KisFlow-Golang Stream Real – Anwendung von KisFlow in Multi-Goroutinen

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


Teil1-Übersicht
Teil 2.1 – Projektaufbau / Grundmodule
Teil 2.2 – Projektaufbau / Grundmodule
Teil3-Datenstrom
Teil 4 – Funktionsplanung
Teil5-Stecker
Teil 6 – Konfigurationsimport und -export
Teil 7 – KisFlow-Aktion
Teil 8-Cache/Params Daten-Caching und Datenparameter
Teil 9 – Mehrere Kopien von Flow
Teil 10 – Prometheus-Metrikstatistik
Teil 11 – Adaptive Registrierung von FaaS-Parametertypen basierend auf Reflexion


Fall 1 – Schnellstart
Case2-Flow Parallelbetrieb
Fall 3 – Anwendung von KisFlow in Multi-Goroutinen
Case4-KisFlow in Message Queue (MQ)-Anwendungen


Laden Sie die KisFlow-Quelle herunter

$go get github.com/aceld/kis-flow
Nach dem Login kopieren

KisFlow-Entwicklerdokumentation

Beispiel für einen Quellcode

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

Wenn Sie möchten, dass derselbe Flow gleichzeitig in mehreren Goroutinen ausgeführt wird, können Sie die Funktion flow.Fork() verwenden, um eine Flow-Instanz mit isoliertem Speicher, aber derselben Konfiguration zu klonen. Jede Flow-Instanz kann dann in verschiedenen Goroutinen ausgeführt werden, um ihre jeweiligen Datenströme zu berechnen.

Fall (III) – KisFlow-Golang Stream Real – Anwendung von KisFlow in Multi-Goroutinen

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 Fall (III) – KisFlow-Golang Stream Real – Anwendung von KisFlow in Multi-Goroutinen 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)
}
Nach dem Login kopieren

In diesem Codeausschnitt starten wir zwei Goroutinen, um Flow1 und seinen Klon (FlowClone1) gleichzeitig auszuführen, um die endgültigen Durchschnittswerte für die Schüler 101, 1001, 201 und 2001 zu berechnen.


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

KisFlow Open Source-Projektadresse: https://github.com/aceld/kis-flow

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


Teil1-Übersicht
Teil 2.1 – Projektaufbau / Grundmodule
Teil 2.2 – Projektaufbau / Grundmodule
Teil3-Datenstrom
Teil 4 – Funktionsplanung
Teil5-Stecker
Teil 6 – Konfigurationsimport und -export
Teil 7 – KisFlow-Aktion
Teil 8-Cache/Params Daten-Caching und Datenparameter
Teil 9 – Mehrere Kopien von Flow
Teil 10 – Prometheus-Metrikstatistik
Teil 11 – Adaptive Registrierung von FaaS-Parametertypen basierend auf Reflexion


Fall 1 – Schnellstart
Case2-Flow Parallelbetrieb
Fall 3 – Anwendung von KisFlow in Multi-Goroutinen
Case4-KisFlow in Message Queue (MQ)-Anwendungen

Das obige ist der detaillierte Inhalt vonFall (III) – KisFlow-Golang Stream Real – Anwendung von KisFlow in Multi-Goroutinen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage