Skip to main content

Crate pg_queue

Crate pg_queue 

Source
Expand description

§pg-queue

PostgreSQL-based job queue, pub/sub, and cache — a Redis replacement.

  • Queues: SKIP LOCKED for concurrent job processing
  • Pub/Sub: LISTEN/NOTIFY for real-time messaging
  • Cache: UNLOGGED tables with per-query TTL checks
  • Request-Response: RPC over PostgreSQL with correlation IDs

§Setup

Run migrations/setup.sql against your database, then create queues:

SELECT pg_queue_create_queue('emails');
SELECT pg_queue_create_queue('jobs');

§Usage

use pg_queue::{PgQueueManager, QueueName};

let pool = sqlx::PgPool::connect("postgres://localhost/mydb").await.unwrap();
let mgr = PgQueueManager::new(pool);

let emails = QueueName::new("emails")?;

// Push a job
mgr.queue.push(&emails, &serde_json::json!({"to": "user@example.com"})).await?;

// Pop and process
if let Some(job) = mgr.queue.pop::<serde_json::Value>(&emails).await? {
    println!("Processing job {}: {:?}", job.id, job.payload);
    mgr.queue.complete(&emails, job.id).await?;
}

Re-exports§

pub use cache::CacheRepository;
pub use errors::PgQueueError;
pub use errors::Result;
pub use listen::ListenerService;
pub use listen::Notification;
pub use notify::NotifyService;
pub use queue::Job;
pub use queue::JobStatus;
pub use queue::QueueName;
pub use queue::QueueRepository;
pub use request_response::RequestResponseService;
pub use request_response::RequestWrapper;

Modules§

cache
errors
listen
notify
queue
request_response

Structs§

PgQueueManager
Main manager combining all PostgreSQL queue/pubsub/cache functionality

Type Aliases§

PgPool
An alias for Pool, specialized for Postgres.