Github: https://github.com/aceld/kis-flow
ドキュメント: https://github.com/aceld/kis-flow/wiki
パート 1-概要
Part2.1-プロジェクト構築/基本モジュール
Part2.2-プロジェクト構築/基本モジュール
Part3-データストリーム
Part4 - 機能のスケジューリング
Part5-コネクタ
Part6 - 構成のインポートとエクスポート
Part7 - KisFlow アクション
Part8 - キャッシュ/パラメータ データのキャッシュとデータ パラメータ
Part9 - フローの複数のコピー
Part10-Prometheus メトリクス統計
Part11 - リフレクションに基づく FaaS パラメーター タイプの適応的登録
ケース 1 - クイックスタート
Case2-Flow並列運転
Case3 - マルチゴルーチンでの KisFlow の適用
Case4-メッセージキュー (MQ) アプリケーションの KisFlow
$go get github.com/aceld/kis-flow
KisFlow 開発者ドキュメント
https://github.com/aceld/kis-flow-usage/tree/main/12-with_kafka
この例では、サードパーティの Kafka クライアント SDK として github.com/segmentio/kafka-go を使用します (開発者は他の Kafka Go ツールを選択できます)。
package main import ( "context" "fmt" "github.com/aceld/kis-flow/file" "github.com/aceld/kis-flow/kis" "github.com/segmentio/kafka-go" "sync" "time" ) func main() { ctx := context.Background() // Load Configuration from file if err := file.ConfigImportYaml("conf/"); err != nil { panic(err) } // Get the flow flowOrg := kis.Pool().GetFlow("CalStuAvgScore") if flowOrg == nil { panic("flowOrg is nil") } // Create a new Kafka reader reader := kafka.NewReader(kafka.ReaderConfig{ Brokers: []string{"localhost:9092"}, Topic: "SourceStuScore", GroupID: "group1", MinBytes: 10e3, // 10KB MaxBytes: 10e6, // 10MB MaxWait: 500 * time.Millisecond, // Maximum wait time StartOffset: kafka.FirstOffset, }) defer reader.Close() var wg sync.WaitGroup for i := 0; i < 5; i++ { // Use 5 consumers to consume in parallel wg.Add(1) go func() { // Fork a new flow for each consumer flowCopy := flowOrg.Fork(ctx) defer wg.Done() for { // Read a message from Kafka message, err := reader.ReadMessage(ctx) if err != nil { fmt.Printf("error reading message: %v\n", err) break } // Commit the message to the flow _ = flowCopy.CommitRow(string(message.Value)) // Run the flow if err := flowCopy.Run(ctx); err != nil { fmt.Println("err: ", err) return } } }() } wg.Wait() return } func init() { // Register functions kis.Pool().FaaS("VerifyStu", VerifyStu) kis.Pool().FaaS("AvgStuScore", AvgStuScore) kis.Pool().FaaS("PrintStuAvgScore", PrintStuAvgScore) }
https://github.com/aceld/kis-flow-usage/tree/main/13-with_nsq
この KisFlow コンシューマーは、サードパーティ SDK として github.com/nsqio/go-nsq を使用します。
package main import ( "context" "fmt" "github.com/aceld/kis-flow/file" "github.com/aceld/kis-flow/kis" "github.com/nsqio/go-nsq" ) func main() { ctx := context.Background() // Load Configuration from file if err := file.ConfigImportYaml("conf/"); err != nil { panic(err) } // Get the flow flowOrg := kis.Pool().GetFlow("CalStuAvgScore") if flowOrg == nil { panic("flowOrg is nil") } // Create a new NSQ consumer config := nsq.NewConfig() config.MaxInFlight = 5 consumer, err := nsq.NewConsumer("SourceStuScore", "channel1", config) if err != nil { panic(err) } consumer.AddHandler(nsq.HandlerFunc(func(message *nsq.Message) error { // Fork a new flow for each message flowCopy := flowOrg.Fork(ctx) // Commit the message to the flow _ = flowCopy.CommitRow(string(message.Body)) // Run the flow if err := flowCopy.Run(ctx); err != nil { fmt.Println("err: ", err) return err } return nil })) err = consumer.ConnectToNSQLookupd("localhost:4161") if err != nil { panic(err) } defer consumer.Stop() select {} } func init() { // Register functions kis.Pool().FaaS("VerifyStu", VerifyStu) kis.Pool().FaaS("AvgStuScore", AvgStuScore) kis.Pool().FaaS("PrintStuAvgScore", PrintStuAvgScore) }
https://github.com/aceld/kis-flow-usage/tree/main/14-with_rocketmq
RocketMQ コンシューマー SDK として github.com/apache/rocketmq-client-go を使用します。
package main import ( "context" "fmt" "github.com/aceld/kis-flow/file" "github.com/aceld/kis-flow/kis" "github.com/apache/rocketmq-client-go/v2" "github.com/apache/rocketmq-client-go/v2/consumer" "github.com/apache/rocketmq-client-go/v2/primitive" ) func main() { // Load Configuration from file if err := file.ConfigImportYaml("conf/"); err != nil { panic(err) } // Get the flow myFlow := kis.Pool().GetFlow("CalStuAvgScore") if myFlow == nil { panic("myFlow is nil") } // Create a new RocketMQ consumer c, err := rocketmq.NewPushConsumer( consumer.WithGroupName("group1"), consumer.WithNameServer([]string{"localhost:9876"}), ) if err != nil { panic(err) } err = c.Subscribe("SourceStuScore", consumer.MessageSelector{}, func(ctx context.Context, msgs ...*primitive.MessageExt) (consumer.ConsumeResult, error) { for _, msg := range msgs { // Commit the message to the flow _ = myFlow.CommitRow(string(msg.Body)) } // Run the flow if err := myFlow.Run(ctx); err != nil { fmt.Println("err: ", err) return consumer.ConsumeRetryLater, err } return consumer.ConsumeSuccess, nil }) if err != nil { panic(err) } err = c.Start() if err != nil { panic(err) } defer c.Shutdown() select {} }
作者: Aceld
GitHub: https://github.com/aceld
KisFlow オープンソース プロジェクトのアドレス: https://github.com/aceld/kis-flow
ドキュメント: https://github.com/aceld/kis-flow/wiki
パート 1-概要
Part2.1-プロジェクト構築/基本モジュール
Part2.2-プロジェクト構築/基本モジュール
Part3-データストリーム
Part4 - 機能のスケジューリング
Part5-コネクタ
Part6 - 構成のインポートとエクスポート
Part7 - KisFlow アクション
Part8 - キャッシュ/パラメータ データのキャッシュとデータ パラメータ
Part9 - フローの複数のコピー
Part10-Prometheus メトリクス統計
Part11 - リフレクションに基づく FaaS パラメーター タイプの適応的登録
ケース 1 - クイックスタート
Case2-Flow並列運転
Case3 - マルチゴルーチンでの KisFlow の適用
Case4-メッセージキュー (MQ) アプリケーションの KisFlow
以上がケース (IV) - KisFlow-Golang Stream Real-メッセージ キュー (MQ) アプリケーションの KisFlowの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。