Queues

The queue module provides in-memory job queues with configurable workers and retry support.

import "github.com/0xfurai/gonest/queue"

q := queue.NewQueue("emails", 100)  // buffer size 100
q.SetWorkers(4)                      // 4 concurrent workers

// Register processor
q.Process("send-welcome", func(job *queue.Job) error {
    var data WelcomeData
    json.Unmarshal(job.Data, &data)
    return sendEmail(data.Email, data.Name)
})

// Start processing
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
q.Start(ctx)

Adding Jobs

q.Add("send-welcome", WelcomeData{Email: "user@example.com", Name: "Alice"})

// With retry
q.Add("send-welcome", data, queue.JobOptions{MaxRetries: 3})

Job Object

FieldTypeDescription
IDstringUnique job ID
NamestringJob type
Datajson.RawMessageSerialized payload
AttemptsintCurrent attempt count
MaxRetriesintMax retry count
CreatedAttime.TimeCreation time

Failed jobs with remaining retries are automatically re-queued.