{
  "id": 19250970,
  "title": "Failed Job Queue Retries: Rate Limits, FIFO, and Idempotency",
  "url": "https://urgent.news/2026/11/10/failed-job-queue-retries-rate-limits-fifo-and-idempotency",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-11-10T00:25:38.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/crimsonwave9361502/failed-job-queue-retries-rate-limits-fifo-and-idempotency-45bo"
  },
  "original_language": "en",
  "account": "When retrying failed jobs under rate limiting, it is essential to establish a clear boundary for downstream allowances. While workers can handle retries locally, separate instances may face challenges due to distinct clocks and shared quotas. To address this, a rate limiter should be placed in a component that oversees the entire limit, or a dispatcher should be used with a configured rate representing the overall limit. Before making any side effects, the system should record the attempt. Retries should have a single owner to avoid creating multiple calls during the process.\n\nWhen considering different queue modes, it is crucial to understand their impact on the system. Standard queues are suitable for independent work that can be duplicated or reordered, while FIFO queues are ideal for work requiring order within a specific entity group. HTTP task dispatchers are beneficial when there is a need for centralized control over the dispatch rate and concurrent delivery. Redis-backed job queues combine the data store, worker runtime, and capacity planning within the application's operating surface.\n\nKey considerations for failure handling include tolerating duplicate and reordered messages for standard delivery, ensuring meaningful order within an entity group for FIFO delivery, and identifying a single authoritative dispatcher for the target's quota. The durable idempotency key and the ledger must be implemented using a data store with uniqueness rules to record job operations accurately.\n\nTo evaluate the performance of different queue modes, it is essential to run failure injection tests. These tests should mimic various failure scenarios, such as downstream call refusals, timeouts, and worker exits. By asserting the final ledger state, number of external calls, total attempts, job age, and terminal result reasons, teams can ensure that the chosen queue mode aligns with their specific requirements and provides the desired level of reliability and performance.",
  "summary": "Use an idempotency ledger and one authoritative rate limit before choosing a queue for retrying failed jobs. The comparison among SQS Standard, SQS FIFO, Cloud Tasks, and Redis/BullMQ matters, but none of those delivery modes can prove that a downstream side effect happened exactly once. The deciding constraint is where the irreversible work lives. A message can be delivered again after a worker…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}