# Background Job Processing

Published articles for Background Job Processing.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## SKIP LOCKED vs. Redis: When Should You Use a Database Queue?

DevFeed: [SKIP LOCKED vs. Redis: When Should You Use a Database Queue?](<https://devfeed.tech/articles/skip-locked-vs-redis-when-should-you-use-a-database-queue-104356.md>)

Original publisher: [Read original article](<https://hackernoon.com/skip-locked-vs-redis-when-should-you-use-a-database-queue?source=rss>)

Author: Vasyl Vdovychenko

Published: 2026-10-28T07:52:57Z

Content type: comparison

Language: en

Sources: [HackerNoon](<https://devfeed.tech/sources/hackernoon.md>)

Topics: [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [Database](<https://devfeed.tech/topics/database.md>), [Redis](<https://devfeed.tech/topics/redis.md>), [Transactions](<https://devfeed.tech/topics/transactions.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [at-least-once-delivery](<https://devfeed.tech/tags/at-least-once-delivery.md>), [backend](<https://devfeed.tech/tags/backend.md>), [background](<https://devfeed.tech/tags/background.md>), [background-job-processing](<https://devfeed.tech/tags/background-job-processing.md>), [c-sharp](<https://devfeed.tech/tags/c-sharp.md>), [database](<https://devfeed.tech/tags/database.md>), [database-row-locking](<https://devfeed.tech/tags/database-row-locking.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [for-update](<https://devfeed.tech/tags/for-update.md>), [idempotency](<https://devfeed.tech/tags/idempotency.md>), [jobs](<https://devfeed.tech/tags/jobs.md>), [postgres-job-queue](<https://devfeed.tech/tags/postgres-job-queue.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [queue](<https://devfeed.tech/tags/queue.md>), [queues](<https://devfeed.tech/tags/queues.md>), [redis](<https://devfeed.tech/tags/redis.md>), [skip](<https://devfeed.tech/tags/skip.md>), [tokens](<https://devfeed.tech/tags/tokens.md>)

### AI overview

`SKIP LOCKED` lets concurrent workers atomically claim different queued rows without waiting, but it only protects the claim: a crash after commit can leave a job stuck as `running`. Recovery needs leases, while heartbeats help slow workers retain a lease; timeouts can still create overlapping owners. Increasing fencing tokens let the database reject stale workers' final writes, and idempotency keys can make repeated external calls, such as payments or emails, harmless. The article describes tradeoffs of a database queue: PostgreSQL update bloat and vacuum work, reliance on the primary, no strict processing order, worker connection use, and limits at very high throughput. For a single-worker side project, the author instead uses a PostgreSQL advisory lock plus an alert for long-running jobs, noting that a dropped database connection loses the lock. The approach fits when its recovery and operational costs are understood; it is not a silver bullet.

### Source excerpt

Is SKIP LOCKED enough for reliable background jobs? Explore leases, heartbeats, fencing tokens, and idempotency in PostgreSQL queues.

## Quarkus Insights #264: JobRunr 9 on Quarkus 3.40 LTS: What Happens When a Job Fails Halfway?

DevFeed: [Quarkus Insights #264: JobRunr 9 on Quarkus 3.40 LTS: What Happens When a Job Fails Halfway?](<https://devfeed.tech/articles/quarkus-insights-264-jobrunr-9-on-quarkus-3-40-lts-what-happens-when-a-job-fails-halfway-93904.md>)

Original publisher: [Read original article](<https://quarkus.io/blog/quarkus-insights-264-jobrunr-failure-handling/>)

Author: James Cobb (https://twitter.com/insectengine)

Published: 2026-10-19T00:00:00Z

Content type: article

Language: en

Sources: [Quarkus - Supersonic Subatomic Java](<https://devfeed.tech/sources/quarkus-supersonic-subatomic-java.md>)

Topics: [Job](<https://devfeed.tech/topics/job.md>), [Quarkus](<https://devfeed.tech/topics/quarkus.md>), [scheduling](<https://devfeed.tech/topics/scheduling.md>), [clean energy data centers](<https://devfeed.tech/topics/clean-energy-data-centers.md>)

Tags: [background-job-processing](<https://devfeed.tech/tags/background-job-processing.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [idempotency](<https://devfeed.tech/tags/idempotency.md>), [jobrunr](<https://devfeed.tech/tags/jobrunr.md>), [quarkus](<https://devfeed.tech/tags/quarkus.md>), [retry](<https://devfeed.tech/tags/retry.md>)

### AI overview

JobRunr 9 pairs with Quarkus 3.40 LTS to run Java background work asynchronously: services enqueue lambdas, jobs are persisted in a shared database, and separate workers poll and execute them. Its Quarkus extension exposes `JobScheduler` through CDI. For partial failures, `JobContext.runStepOnce(...)` records successful steps so retries skip them and resume at the failed step, reducing the risk of repeating side effects; the dashboard shows step status and execution timelines. Carbon-aware scheduling uses ENTSO-E forecasts in Europe and Electricity Maps in North America, with jobs deferred to the end of the requested window if forecasting APIs are unavailable. The text says Open Source includes retries, carbon-aware scheduling, and a dashboard; Pro adds features such as priority queues, multi-tenancy, job chaining, and approval workflows.

### Source excerpt

This summary was generated using AI, reviewed by humans - watch the video for the full story. Quarkus Insights #264: JobRunr 9 on Quarkus 3.40 LTS: What Happens When a Job Fails Halfway? Background job processing is essential for modern web applications, yet handling long-running distributed tasks reliably remains a persistent challenge. What happens when a multi-step job bills a customer, generates an invoice, and crashes while sending an email? In episode 264, Ronald Dehuysser, creator and founder of JobRunr, joins hosts Eric Deandrea and Holly Cummins to celebrate the release of JobRunr 9 and its day-one alignment with Quarkus 3.40 LTS. Through live coding and architectural discussion, Ronald demonstrates how JobRunr simplifies distributed processing in Java, schedules background tasks around clean energy grid forecasts, and guarantees step-level idempotency so failed jobs can safely retry without duplicating side effects. Quarkus Ecosystem News Holly kicked off the episode with updates across the Quarkus ecosystem: Quarkus 3.40.1.1: A fresh micro release is available on the latest long-term support (LTS) stream. Ecosystem releases for Quarkus 4 beta: With the Quarkus 4 beta available, numerous Quarkiverse and ecosystem projects have published new releases, many providing early compatibility: Quarkus GitHub Actions 3.0.0 beta 2 JasperReports 1.4.2 Quarkus Amazon Web Services (AWS) 4.0.0 beta 3 Quarkus Temporal 1.0 Quarkus Network Faults 0.2.0 (designed for chaos engineering and failure injection SystemD Notify 1.1 (integrating with systemd service notifications) IronJacamar 2.0 beta 2 Quarkus PrimeFaces 4.16.1 Quinoa 2.9.3 Roq 1.2.20 Origins and Architecture of JobRunr Ronald shared the backstory behind JobRunr. While freelancing prior to the pandemic, he faced distributed computing challenges in Java where background tasks lacked consistent correlation IDs, jobs vanished into dead-letter queues without monitoring, and debugging required parsing disjointed logs.

## Message Queues Explained: How They Work & Why

DevFeed: [Message Queues Explained: How They Work & Why](<https://devfeed.tech/articles/message-queues-explained-how-they-work-why-87507.md>)

Original publisher: [Read original article](<https://talent500.com/blog/message-queues/>)

Author: Kashif Khan

Published: 2026-10-15T02:16:52Z

Content type: tutorial

Language: en

Sources: [Talent500](<https://devfeed.tech/sources/backend-archives-talent500-blog.md>)

Topics: [Messaging](<https://devfeed.tech/topics/messaging.md>), [Publish-subscribe pattern](<https://devfeed.tech/topics/pubsub.md>), [Apache Kafka](<https://devfeed.tech/topics/apache-kafka.md>), [Amazon Simple Queue Service (SQS)](<https://devfeed.tech/topics/amazon-simple-queue-service-sqs.md>), [RabbitMQ](<https://devfeed.tech/topics/rabbitmq.md>)

Tags: [amazon-sqs](<https://devfeed.tech/tags/amazon-sqs.md>), [apache](<https://devfeed.tech/tags/apache.md>), [apache-kafka](<https://devfeed.tech/tags/apache-kafka.md>), [asynchronous-communication](<https://devfeed.tech/tags/asynchronous-communication.md>), [azure-service-bus](<https://devfeed.tech/tags/azure-service-bus.md>), [backend](<https://devfeed.tech/tags/backend.md>), [background-job-processing](<https://devfeed.tech/tags/background-job-processing.md>), [benefits-of-message-queues](<https://devfeed.tech/tags/benefits-of-message-queues.md>), [dead-letter-queue](<https://devfeed.tech/tags/dead-letter-queue.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [event-streaming](<https://devfeed.tech/tags/event-streaming.md>), [google-cloud-pub-sub](<https://devfeed.tech/tags/google-cloud-pub-sub.md>), [how-message-queues-work](<https://devfeed.tech/tags/how-message-queues-work.md>), [message-broker](<https://devfeed.tech/tags/message-broker.md>), [message-prioritization](<https://devfeed.tech/tags/message-prioritization.md>), [message-producers-and-consumers](<https://devfeed.tech/tags/message-producers-and-consumers.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [message-queue-components](<https://devfeed.tech/tags/message-queue-components.md>), [message-queue-implementation](<https://devfeed.tech/tags/message-queue-implementation.md>), [message-queue-vs-database](<https://devfeed.tech/tags/message-queue-vs-database.md>), [message-queue-vs-message-bus](<https://devfeed.tech/tags/message-queue-vs-message-bus.md>), [message-queue-vs-pub-sub](<https://devfeed.tech/tags/message-queue-vs-pub-sub.md>), [message-queue-vs-web-services](<https://devfeed.tech/tags/message-queue-vs-web-services.md>), [message-queues](<https://devfeed.tech/tags/message-queues.md>), [message-queuing-as-a-service](<https://devfeed.tech/tags/message-queuing-as-a-service.md>), [message-routing](<https://devfeed.tech/tags/message-routing.md>), [microservices-messaging](<https://devfeed.tech/tags/microservices-messaging.md>), [point-to-point-messaging](<https://devfeed.tech/tags/point-to-point-messaging.md>), [publish-subscribe-messaging](<https://devfeed.tech/tags/publish-subscribe-messaging.md>), [python-message-queue](<https://devfeed.tech/tags/python-message-queue.md>), [queues](<https://devfeed.tech/tags/queues.md>), [rabbitmq](<https://devfeed.tech/tags/rabbitmq.md>), [types-of-message-queues](<https://devfeed.tech/tags/types-of-message-queues.md>)

### AI overview

This tutorial explains message queues as a way for applications and services to communicate asynchronously. It covers producers, consumers, routing, acknowledgements, retries, dead letter queues, queue and publish-subscribe models, and uses such as background jobs and microservices. It also introduces Kafka and managed cloud messaging services.

### Source excerpt

A message queue enables applications and services to exchange data asynchronously without depending on immediate responses. Explore how message queues work, their types, key components, benefits, and popular tools like RabbitMQ, Apache Kafka, and Amazon SQS for building scalable, reliable systems. The post Message Queues Explained: How They Work & Why appeared first on Talent500 blog.

## Fair by design: orchestrating background jobs in Ruby

DevFeed: [Fair by design: orchestrating background jobs in Ruby](<https://devfeed.tech/articles/fair-by-design-orchestrating-background-jobs-in-ruby-19782.md>)

Original publisher: [Read original article](<https://evilmartians.com/chronicles/fair-by-design-orchestrating-background-jobs-in-ruby>)

Author: Travis Turner (richardturner@evilmartians.com)

Published: 2026-08-11T00:00:00Z

Content type: article

Language: en

Sources: [Evil Martians](<https://devfeed.tech/sources/evil-martians.md>)

Topics: [scheduling](<https://devfeed.tech/topics/scheduling.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>), [rate-limiting](<https://devfeed.tech/topics/rate-limiting.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [autoscaling](<https://devfeed.tech/tags/autoscaling.md>), [background-job-processing](<https://devfeed.tech/tags/background-job-processing.md>), [database](<https://devfeed.tech/tags/database.md>), [latency](<https://devfeed.tech/tags/latency.md>), [peak-traffic](<https://devfeed.tech/tags/peak-traffic.md>), [performance](<https://devfeed.tech/tags/performance.md>), [prioritization](<https://devfeed.tech/tags/prioritization.md>), [qos](<https://devfeed.tech/tags/qos.md>), [queue](<https://devfeed.tech/tags/queue.md>), [rails](<https://devfeed.tech/tags/rails.md>), [redis](<https://devfeed.tech/tags/redis.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [sidekiq](<https://devfeed.tech/tags/sidekiq.md>)

### AI overview

The excerpt argues that a single background-job queue can let a large workload delay smaller jobs, harming user experience even when the system is operating as designed. It identifies queue latency--the age of the oldest waiting job--as a quality-of-service signal. Adding workers may improve throughput, but increases cost and eventually meets shared-resource limits such as database connections and external API rate limits. When latency cannot be avoided, prioritization becomes relevant; the excerpt ends before explaining how to implement it.

### Source excerpt

Are you treating your users fairly? They could be stuck in the queue while a greedy user monopolizes resources. And you might not even know it! In this post, you'll see if it's time for you to take background job prioritization seriously, and how to make it fair for all users.