{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://inquir.org/#organization","name":"Inquir","url":"https://inquir.org","logo":{"@type":"ImageObject","url":"https://inquir.org/favicon.png","width":256,"height":256}},{"@type":"WebSite","@id":"https://inquir.org/#website","name":"Inquir Compute","url":"https://inquir.org","publisher":{"@id":"https://inquir.org/#organization"}},{"@type":"WebPage","@id":"https://inquir.org/background-jobs-with-retries#webpage","url":"https://inquir.org/background-jobs-with-retries","name":"Background jobs with retries—without a worker fleet","headline":"Background jobs with retries—without a worker fleet","description":"Background jobs with retries: enqueue from HTTP or webhooks, retry failed pipeline steps with backoff, inspect history—no Redis, BullMQ, or worker retry loops.","inLanguage":"en-US","isPartOf":{"@id":"https://inquir.org/#website"},"breadcrumb":{"@id":"https://inquir.org/background-jobs-with-retries#breadcrumb"},"author":{"@id":"https://inquir.org/#organization"},"datePublished":"2025-11-01T00:00:00.000Z","dateModified":"2026-06-23T00:00:00.000Z","citation":{"@type":"CreativeWork","url":"https://inquir.org/docs"}},{"@type":"BreadcrumbList","@id":"https://inquir.org/background-jobs-with-retries#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://inquir.org/"},{"@type":"ListItem","position":2,"name":"Background jobs with retries","item":"https://inquir.org/background-jobs-with-retries"}]},{"@type":"HowTo","@id":"https://inquir.org/background-jobs-with-retries#howto","name":"Background jobs with retries—without a worker fleet","description":"Background jobs with retries: enqueue from HTTP or webhooks, retry failed pipeline steps with backoff, inspect history—no Redis, BullMQ, or worker retry loops.","inLanguage":"en-US","author":{"@id":"https://inquir.org/#organization"},"step":[{"@type":"HowToStep","position":1,"name":"Accept and enqueue","text":"HTTP handler or webhook returns 202 immediately. Call global.durable.startNew() with the job payload."},{"@type":"HowToStep","position":2,"name":"Write idempotent step handlers","text":"Each pipeline step checks a dedupe key before side effects. Return structured output for the next step."},{"@type":"HowToStep","position":3,"name":"Configure retry policy and alert","text":"Set step retry count and backoff in pipeline config. Alert when failure rate exceeds threshold."}],"isPartOf":{"@id":"https://inquir.org/background-jobs-with-retries#webpage"}},{"@type":"FAQPage","@id":"https://inquir.org/background-jobs-with-retries#faq","url":"https://inquir.org/background-jobs-with-retries","isPartOf":{"@id":"https://inquir.org/background-jobs-with-retries#webpage"},"mainEntity":[{"@type":"Question","name":"How is this different from BullMQ retries?","acceptedAnswer":{"@type":"Answer","text":"BullMQ retries entire jobs in Redis with a worker process. Inquir retries individual pipeline steps with checkpointed progress—no Redis, no worker fleet."}},{"@type":"Question","name":"Can I set different retry policies per step?","acceptedAnswer":{"@type":"Answer","text":"Yes. Configure retry count and backoff per pipeline step. A flaky external API step can retry more aggressively than a local validation step."}},{"@type":"Question","name":"What happens after retries are exhausted?","acceptedAnswer":{"@type":"Answer","text":"The pipeline run is marked failed with full logs. Replay manually from execution history or alert for operator intervention."}}]}]}