pgqrs
A PostgreSQL-backed job queue for Rust applications, with a CLI for administration and a type-safe async library API.
Features
- Efficient: Uses PostgreSQL's
SKIP LOCKEDfor concurrent job fetching - Type-Safe: Rust types for message payloads
- Visibility Timeout: Exactly-once delivery within a lock period
- CLI Tools: Administer and debug queues from the command line
Installation
Add to your Cargo.toml:
[]
= "0.1.0"
Library Usage
See examples/basic_usage.rs for a full example. Typical usage:
use PgqrsAdmin;
use Config;
use json;
async
Configuration
You can configure pgqrs via:
- Environment variables:
DATABASE_URL,PGQRS_SCHEMA, etc.
- YAML config file (default:
pgqrs.yaml):- See example in this repo for all options.
- Programmatic:
Config::default()or build your own config struct.
CLI Usage
The CLI is defined in src/main.rs and supports the following commands:
Top-level commands
install [--dry-run]— Install pgqrs schemauninstall [--dry-run]— Uninstall pgqrs schemaverify— Verify installationqueue <subcommand>— Queue managementmessage <subcommand>— Message management
Queue commands
queue create <name>— Create a new queuequeue list— List all queuesqueue delete <name>— Delete a queuequeue purge <name>— Purge all messages from a queuequeue metrics [<name>]— Show metrics for a queue or all queues
Message commands
message send <queue> <payload> [--delay <seconds>]— Send a message (payload is JSON)message read <queue> [--count <n>] [--lock-time <seconds>] [--message-type <type>]— Read messagesmessage dequeue <queue>— Read and return one messagemessage delete <queue> <id>— Delete a message by IDmessage count <queue>— Show pending message count
Output and Logging Options
All commands support global flags:
--database-url <url>— Override database URL--config <path>— Config file path (default: pgqrs.yaml)--log-dest <stderr|file>— Log destination--log-level <error|warn|info|debug|trace>— Log level--output-format <json|csv|yaml>— Output format--output-dest <stdout|file>— Output destination
API Reference
See src/main.rs and examples/basic_usage.rs for the current API. Key types and methods:
PgqrsAdmin::install(dry_run)— Install schemaPgqrsAdmin::create_queue(name)— Create queuePgqrsAdmin::list_queues()— List queuesPgqrsAdmin::get_queue(name)— Get queue handleQueueHandle::enqueue(payload)— Send messageQueueHandle::batch_enqueue(payloads)— Send batchQueueHandle::enqueue_delayed(payload, delay_secs)— Send delayed messageQueueHandle::read(count)— Read messagesQueueHandle::read_delay(count, delay_secs)— Read messages with delayQueueHandle::delete_batch(ids)— Delete messagesQueueHandle::extend_visibility(id, seconds)— Extend lockQueueHandle::pending_count()— Pending message countPgqrsAdmin::queue_metrics(name)— Queue metricsPgqrsAdmin::all_queues_metrics()— Metrics for all queues
Development Status
Note: Many functions are currently todo!() placeholders. See src/main.rs and examples/basic_usage.rs for the evolving API.
License
Licensed under either of:
- Apache License, Version 2.0
- MIT license
at your option.