DAG Consumer Topology
seqflow supports arbitrary directed acyclic graph (DAG) dependencies between handlers, not just linear pipelines.
Linear Pipeline
seqflow.WithHandler("A", handlerA),
seqflow.WithHandler("B", handlerB, seqflow.DependsOn("A")),
seqflow.WithHandler("C", handlerC, seqflow.DependsOn("B")),
A must finish before B starts. B must finish before C starts.
Diamond
seqflow.WithHandler("A", handlerA),
seqflow.WithHandler("B", handlerB, seqflow.DependsOn("A")),
seqflow.WithHandler("C", handlerC, seqflow.DependsOn("A")),
seqflow.WithHandler("D", handlerD, seqflow.DependsOn("B", "C")),
B and C run in parallel after A. D waits for both B and C.
Fan-out
seqflow.WithHandler("A", handlerA),
seqflow.WithHandler("B", handlerB, seqflow.DependsOn("A")),
seqflow.WithHandler("C", handlerC, seqflow.DependsOn("A")),
seqflow.WithHandler("D", handlerD, seqflow.DependsOn("A")),
B, C, D all run independently in parallel after A.
Independent (no dependencies)
seqflow.WithHandler("logger", logHandler),
seqflow.WithHandler("monitor", monitorHandler),
seqflow.WithHandler("archive", archiveHandler),
All three process the same events independently. Each gets every event.
How It Works
- Each handler has an independent sequence tracking its progress
DependsOncreates a composite barrier from dependency sequences- A handler can only advance to the minimum position of all its dependencies
- Terminal handlers (not referenced by any
DependsOn) gate the producer