Skip to main content
go get github.com/asyncbase-dev/asyncbase-go

Minimal example

package main

import (
    "context"
    "log"
    "os"
    "time"

    "github.com/asyncbase-dev/asyncbase-go/asyncbase"
)

func main() {
    c := asyncbase.New(os.Getenv("ASYNCBASE_KEY"))
    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    defer cancel()

    r, err := c.Send(ctx, "emails", map[string]any{
        "to": "a@b.com", "subject": "hi",
    }, &asyncbase.SendOptions{Delay: "30s"})
    if err != nil { log.Fatal(err) }
    log.Println("sent", r.ID)
}

Consumer — goroutine + context

package main

import (
    "context"
    "log"
    "os"
    "os/signal"
    "syscall"
    "time"

    "github.com/asyncbase-dev/asyncbase-go/asyncbase"
)

func main() {
    c := asyncbase.New(os.Getenv("ASYNCBASE_KEY"))
    ctx, cancel := signal.NotifyContext(context.Background(),
        syscall.SIGINT, syscall.SIGTERM)
    defer cancel()

    msgs, errs := c.Consume(ctx, "emails", asyncbase.PullOptions{
        Group: "go-workers", VisibilitySeconds: 60,
    }, time.Second)

    for {
        select {
        case <-ctx.Done():
            return
        case m, ok := <-msgs:
            if !ok { return }
            if err := handle(m.Payload); err != nil {
                m.Nack(ctx, nil)
            } else {
                m.Ack(ctx)
            }
        case err := <-errs:
            log.Printf("error: %v", err); return
        }
    }
}

func handle(_ map[string]any) error { return nil }

Options

c := asyncbase.New(
    os.Getenv("ASYNCBASE_KEY"),
    asyncbase.WithBaseURL("https://api.asyncbase.dev"),
    asyncbase.WithHTTPClient(&http.Client{Timeout: 10 * time.Second}),
)

Error handling

_, err := c.Send(ctx, "emails", payload, nil)
switch {
case asyncbase.IsCode(err, "RATE_LIMITED"):
    time.Sleep(time.Second)
case asyncbase.IsCode(err, "PAYLOAD_TOO_LARGE"):
    // don't retry — payload will never fit
default:
    if err != nil { return err }
}
*asyncbase.Error exposes .Code, .Message, .Docs, .Status, .RequestID.