从安装到跑起来第一个流程

先照这一篇装上,把第一个流程跑起来。然后读「重放模型」,那是唯一一件必须先弄明白的事。后面几篇是手册,用到再查。

本页目录

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(),})

Render diagnostics