A high-performance, reliable Postgres-backed distributed job queue for Elixir with ACID guarantees and a web GUI.
Rihanna is a high-performance, distributed job queue for Elixir that uses PostgreSQL as its backing store. It enables durable, asynchronous job processing with ACID guarantees, ensuring jobs survive application restarts and system failures. The library is designed for simplicity, leveraging existing database infrastructure without requiring additional services.
Elixir developers building applications that need reliable background job processing, especially those already using PostgreSQL and seeking a queue integrated with their database.
Developers choose Rihanna for its seamless integration with PostgreSQL, eliminating external dependencies, while providing strong durability guarantees, support for arbitrary Elixir data types, and a configurable architecture that balances performance and reliability.
Rihanna is a high performance postgres-backed job queue for Elixir
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Leverages your existing PostgreSQL database, eliminating the need for additional services like Redis or RabbitMQ, as highlighted in the README's philosophy.
Jobs are stored transactionally with PostgreSQL, ensuring 100% durability and at-least-once execution even after BEAM restarts or database failures.
Allows passing arbitrary Elixir terms like tuples and structs as job arguments, avoiding JSON serialization constraints mentioned in the features.
Supports both simple mod-fun-args tuples and the Rihanna.Job behaviour for custom retry strategies, offering versatility in job implementation.
Includes Rihanna UI for visually inspecting, deleting, and retrying failed jobs, enhancing operational transparency without extra tools.
The README admits a limit of around 10,000 jobs per second, making it unsuitable for very high-volume messaging compared to systems like Kafka.
Currently lacks support for multiple queues, which can hinder complex job routing and prioritization in larger applications.
Jobs may execute more than once in failure scenarios like node disconnections, requiring idempotent design to avoid data consistency issues.
Long-running jobs are terminated during application restarts (e.g., deployments), as noted in the FAQs, which can be problematic for extended tasks.