mirror of
				https://github.com/oarkflow/mq.git
				synced 2025-10-31 15:57:09 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"encoding/json"
 | |
| 	"fmt"
 | |
| 
 | |
| 	"github.com/oarkflow/mq/v2"
 | |
| )
 | |
| 
 | |
| func handler1(ctx context.Context, task *v2.Task) v2.Result {
 | |
| 	return v2.Result{Payload: task.Payload, Ctx: ctx}
 | |
| }
 | |
| 
 | |
| func handler2(ctx context.Context, task *v2.Task) v2.Result {
 | |
| 	var user map[string]any
 | |
| 	json.Unmarshal(task.Payload, &user)
 | |
| 	return v2.Result{Payload: task.Payload, Ctx: ctx}
 | |
| }
 | |
| 
 | |
| func handler3(ctx context.Context, task *v2.Task) v2.Result {
 | |
| 	var user map[string]any
 | |
| 	json.Unmarshal(task.Payload, &user)
 | |
| 	age := int(user["age"].(float64))
 | |
| 	status := "FAIL"
 | |
| 	if age > 20 {
 | |
| 		status = "PASS"
 | |
| 	}
 | |
| 	user["status"] = status
 | |
| 	resultPayload, _ := json.Marshal(user)
 | |
| 	return v2.Result{Payload: resultPayload, Status: status, Ctx: ctx}
 | |
| }
 | |
| 
 | |
| func handler4(ctx context.Context, task *v2.Task) v2.Result {
 | |
| 	var user map[string]any
 | |
| 	json.Unmarshal(task.Payload, &user)
 | |
| 	user["final"] = "D"
 | |
| 	resultPayload, _ := json.Marshal(user)
 | |
| 	return v2.Result{Payload: resultPayload, Ctx: ctx}
 | |
| }
 | |
| 
 | |
| func handler5(ctx context.Context, task *v2.Task) v2.Result {
 | |
| 	var user map[string]any
 | |
| 	json.Unmarshal(task.Payload, &user)
 | |
| 	user["salary"] = "E"
 | |
| 	resultPayload, _ := json.Marshal(user)
 | |
| 	return v2.Result{Payload: resultPayload, Ctx: ctx}
 | |
| }
 | |
| 
 | |
| func handler6(ctx context.Context, task *v2.Task) v2.Result {
 | |
| 	var user map[string]any
 | |
| 	json.Unmarshal(task.Payload, &user)
 | |
| 	resultPayload, _ := json.Marshal(map[string]any{"storage": user})
 | |
| 	return v2.Result{Payload: resultPayload, Ctx: ctx}
 | |
| }
 | |
| 
 | |
| func main() {
 | |
| 	dag := v2.NewDAG()
 | |
| 	dag.AddNode("A", handler1)
 | |
| 	dag.AddNode("B", handler2)
 | |
| 	dag.AddNode("C", handler3)
 | |
| 	dag.AddNode("D", handler4)
 | |
| 	dag.AddNode("E", handler5)
 | |
| 	dag.AddNode("F", handler6)
 | |
| 	dag.AddEdge("A", "B", v2.LoopEdge)
 | |
| 	dag.AddCondition("C", map[string]string{"PASS": "D", "FAIL": "E"})
 | |
| 	dag.AddEdge("B", "C")
 | |
| 	dag.AddEdge("D", "F")
 | |
| 	dag.AddEdge("E", "F")
 | |
| 
 | |
| 	initialPayload, _ := json.Marshal([]map[string]any{
 | |
| 		{"user_id": 1, "age": 12},
 | |
| 		{"user_id": 2, "age": 34},
 | |
| 	})
 | |
| 	rs := dag.ProcessTask(context.Background(), "A", initialPayload)
 | |
| 	fmt.Println(string(rs.Payload))
 | |
| }
 | 
