A Resque-compatible, Go-based background worker that runs jobs 10-100,000x faster than Ruby workers.
goworker is a high-performance background job worker written in Go that is fully compatible with Ruby's Resque job queue system. It allows developers to push jobs from Ruby applications while leveraging Go's efficiency and concurrency to reduce job latency and operational costs. This enables teams to keep most jobs in Ruby while offloading resource-intensive tasks to Go workers.
Teams with existing Ruby on Rails or Ruby applications using Resque for background jobs who want to improve performance and reduce costs by migrating heavy workloads to Go. Developers looking to incrementally adopt Go within a Ruby ecosystem without rewriting their entire job processing infrastructure.
goworker offers seamless compatibility with Resque, allowing Ruby applications to push jobs to the same Redis queues that Go workers process, eliminating the need for client-side changes. Its high concurrency support (up to 100,000 workers) and efficient polling reduce latency and infrastructure costs compared to Ruby-based workers.
goworker is a Go-based background worker that runs 10 to 100,000* times faster than Ruby-based workers.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Allows Ruby applications to push jobs without client-side changes, as shown in the README's examples using the same Redis queues and namespace as Resque.
Supports up to 100,000 concurrent workers configurable via flags, enabling efficient processing of high-volume job queues with reduced latency.
Offers weighted queues and custom polling intervals, providing control over job priorities and resource allocation, as detailed in the flags section.
Handles signals like QUIT and TERM to stop polling while allowing running jobs to complete, which is essential for platforms like Heroku with strict process management.
The README explicitly states no guarantees about job safety on process shutdown, with potential job loss if killed abruptly, similar to Resque's failure modes.
Job arguments are passed as interface{} slices, requiring manual type assertions in Go code, which can be error-prone and verbose, as illustrated in the example with json.Number.
Relies entirely on Redis for job storage and polling, limiting deployment flexibility and adding infrastructure overhead, with no alternative backends supported.