A simple HTTP message queue written in Go. It accepts tasks via a Connect RPC API and executes HTTP requests with configurable retry logic.
- HTTP-based task queue with Connect RPC API
- Configurable retry logic with exponential backoff
- SQLite storage (pure Go, no CGO required)
- Multiple named queues support
- Task execution status tracking
- Go 1.21+
- Just (optional, for convenience commands)
-
Install dependencies
just init
-
Configure your queues in
openqueue.yaml:queues: - name: my_queue db: my_queue retry: 3
-
Start the server
just dev
Or build and run manually:
go build -o ./tmp/main ./cmd/root.go ./tmp/main server --port 8080 --config openqueue.yaml
Create an openqueue.yaml file:
queues:
- name: my_queue
db: my_queue # SQLite database name (stored in ./data/)
retry: 3 # Max retry attemptscurl \
--header 'Content-Type: application/json' \
--data '{"queue_name": "my_queue", "task":{"url":"http://example.com/webhook", "method":"GET"}}' \
http://localhost:8080/api.v1.QueueService/CreateTaskcurl \
--header 'Content-Type: application/json' \
--data '{"queue_name": "my_queue", "taskId":"<task-id>"}' \
http://localhost:8080/api.v1.QueueService/GetTask# Development with hot reload
just dev
# Build
just build
# Run tests
go test ./...
# Update dependencies
just update
# Generate protobuf code
buf generatecmd/ # CLI entry points
pkg/
api/apiv1/ # Connect RPC handlers (CreateTask, GetTask)
config/ # YAML configuration loading
database/ # SQLite database layer
server/ # HTTP server setup with chi router
task_runner/ # Task execution with retry logic
proto/ # Protocol buffer definitions
data/ # SQLite database files (created at runtime)
MIT