从安装到跑起来第一个流程
先照这一篇装上,把第一个流程跑起来。然后读「重放模型」,那是唯一一件必须先弄明白的事。后面几篇是手册,用到再查。
gotick 是一个库,不是一个服务。没有东西要部署,没有表要迁移,也没有常驻进程要看着。它需要一个 Redis,你已经有的那个就行。
安装
需要 Go 1.25 以上。多个项目可以共用一个 Redis:给每个项目配一个自己的队列命名空间,它们就互不干扰。
go get github.com/zbysir/gotick注册流程,启动调度器
NewServerFromConfig 建一个 server,Flow 把流程定义登记到一个 id 上,StartServer 阻塞着跑调度。StartServer 一般放在 main 的最后一行,或者你 HTTP 服务旁边起一个 goroutine。注意注册不等于执行,真正让流程跑起来的是 Trigger。
tick, err := gotick.NewServerFromConfig(gotick.Config{ RedisURL: "redis://localhost:6379/0",})if err != nil { log.Fatal(err)} tick.Flow("order/close", func(ctx *gotick.Context) { gotick.Task(ctx, "create-order", createOrder) gotick.Sleep(ctx, "wait-payment", 30*time.Minute) gotick.Task(ctx, "close-order", closeOrder)}) callId, err := tick.Trigger(ctx, "order/close", gotick.MetaData{ "order_id": "ORD-1",}) log.Fatal(tick.StartServer(ctx))只负责触发的进程
HTTP handler 只需要启动流程,不需要自己执行流程。NewClient 只提供 Trigger。它通过 Redis 找到 worker,两个进程之间没有直连,可以各自独立发版。
client, err := gotick.NewClient(gotick.NewClientConfig{ RedisURL: "redis://localhost:6379/0",})if err != nil { log.Fatal(err)} // 0 = start nowcallId, err := client.Trigger(ctx, "order/close", meta, 0)写测试不用 Redis
队列和存储都有内存实现,单元测试里跑的就是真流程:真调度、真重放、真重试,全在测试进程内完成。仓库里所有测试都这么写。
tick := gotick.NewServer(gotick.NewServerParams{ DelayedQueue: store.NewMockRedisDelayedQueue(), KVStore: store.NewMockKvStore(),})