Files
grosbeak/internal/liteq/bench/main.go
Matt Jadud 06cdc68be7 Integrated, working.
This integrates the liteq, and it prevents duplicates in a way that
matches my use-case.

I might try and push things back out to a separate module, but for now,
this will do.
2025-11-30 18:01:35 -05:00

72 lines
1.2 KiB
Go

package main
import (
"context"
"database/sql"
"fmt"
"math/rand"
"time"
liteq "git.jadud.com/jadudm/grosbeak/internal/liteq"
_ "modernc.org/sqlite"
)
func main() {
howMany := 100_000
go func() {
db, err := sql.Open("sqlite", "bench.db")
if err != nil {
panic(err)
}
liteq.Setup(db)
jq := liteq.New(db)
for i := 0; i < howMany; i++ {
jq.QueueJob(context.Background(), liteq.QueueJobParams{
Queue: fmt.Sprintf("default-%d", i%30),
Job: "SendEmail",
})
}
}()
c := make(chan struct{})
for i := 0; i < 30; i++ {
db, err := sql.Open("sqlite", "bench.db")
if err != nil {
panic(err)
}
liteq.Setup(db)
jq := liteq.New(db)
go func(i int) {
err := jq.Consume(context.Background(), liteq.ConsumeParams{
Queue: fmt.Sprintf("default-%d", i),
PoolSize: 10,
Worker: func(ctx context.Context, job *liteq.Job) error {
// random sleep
n := rand.Intn(50)
time.Sleep(time.Duration(n) * time.Millisecond)
c <- struct{}{}
return nil
},
})
fmt.Println(err)
}(i)
}
rec := 0
for range c {
rec++
if rec%1000 == 0 {
fmt.Println(rec)
}
if rec == howMany {
return
}
}
}