Documentation
¶
Overview ¶
Package tasks provides a durable task client for Hanzo Tasks.
Drop-in replacement for Base's Cron():
// Before (cron):
e.App.Cron().Add("settlement", "*/30 * * * * *", func() { ... })
// After (tasks — duration):
app.Tasks().Add("settlement", "30s", fn)
// After (tasks — cron expression):
app.Tasks().Add("daily-cleanup", "0 3 * * *", fn)
Accepts both Go duration strings ("30s", "5m", "1h") and cron expressions ("0 3 * * *", "0 0 * * 1", "0 0 5 1,4,7,10 *"). Detection is automatic: if time.ParseDuration succeeds, it's a duration; otherwise it's cron.
If TASKS_URL is set, schedules run as durable Temporal workflows (retries, dead letter, audit trail). If not, runs locally via goroutine timer (dev mode, same behavior as cron but no persistence).
If zapAddr is set, ZAP binary transport is preferred over HTTP for submitting tasks (lower latency, same semantics). HTTP is fallback.
Package tasks provides the Hanzo Tasks client for Go applications.
Two methods, two use cases:
app.Tasks().Add("settlement", "30s", fn) // recurring (duration)
app.Tasks().Add("daily-cleanup", "0 3 * * *", fn) // recurring (cron)
app.Tasks().Now("webhook.deliver", payload) // fire once immediately
Add() auto-detects duration strings vs cron expressions. Transport: ZAP (binary) > HTTP > local goroutine.
Index ¶
Constants ¶
const ( OpcodeTaskSubmit uint16 = 0x0050 // one-shot task OpcodeTaskSchedule uint16 = 0x0051 // recurring schedule )
ZAP opcodes for task submission.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client manages both one-shot tasks and recurring schedules.
func New ¶
New creates a Client. If both tasksURL and zapAddr are empty, everything runs locally. If zapAddr is set, ZAP transport is preferred. HTTP is fallback.
func (*Client) Add ¶
Add registers a recurring task. schedule is either a Go duration string ("30s", "5m", "1h") or a cron expression ("0 3 * * *", "0 0 * * 1"). Detection is automatic via time.ParseDuration.
app.Tasks().Add("settlement", "30s", fn) // every 30 seconds
app.Tasks().Add("daily-cleanup", "0 3 * * *", fn) // daily at 3am UTC
app.Tasks().Add("weekly-report", "0 0 * * 1", fn) // mondays at midnight