[{"data":1,"prerenderedAt":676},["ShallowReactive",2],{"navigation:en":3,"\u002Fblog\u002Fasync-queues-background-jobs-serverless":129},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Nuxfire Docs","\u002Fdocs","docs\u002F0.index",[9,11],{"title":5,"path":6,"stem":7,"icon":10},"i-ph-squares-four-duotone",{"title":12,"path":13,"stem":14,"children":15,"icon":18},"Flow Videos","\u002Fdocs\u002Fflow-videos","docs\u002Fflow-videos\u002F0.index",[16,19,36,67,93],{"title":17,"path":13,"stem":14,"icon":18},"Serelius Flow Video","i-ph-video-camera-duotone",{"title":20,"icon":21,"path":22,"stem":23,"children":24,"page":35},"Getting Started","i-ph-rocket-launch-duotone","\u002Fdocs\u002Fflow-videos\u002Fgetting-started","docs\u002Fflow-videos\u002F1.getting-started",[25,30],{"title":26,"path":27,"stem":28,"icon":29},"Overview","\u002Fdocs\u002Fflow-videos\u002Fgetting-started\u002Foverview","docs\u002Fflow-videos\u002F1.getting-started\u002F0.overview","i-ph-play-circle-duotone",{"title":31,"path":32,"stem":33,"icon":34},"Global Features","\u002Fdocs\u002Fflow-videos\u002Fgetting-started\u002Fglobal-features","docs\u002Fflow-videos\u002F1.getting-started\u002F1.global-features","i-ph-gear-six-duotone",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"Pipeline","i-ph-film-strip-duotone","\u002Fdocs\u002Fflow-videos\u002Fpipeline","docs\u002Fflow-videos\u002F2.pipeline",[42,47,52,57,62],{"title":43,"path":44,"stem":45,"icon":46},"Phase 1 — Script","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Fscript","docs\u002Fflow-videos\u002F2.pipeline\u002F1.script","i-ph-scroll-duotone",{"title":48,"path":49,"stem":50,"icon":51},"Phase 2 — Style & Identity","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Fstyle-and-identity","docs\u002Fflow-videos\u002F2.pipeline\u002F2.style-and-identity","i-ph-palette-duotone",{"title":53,"path":54,"stem":55,"icon":56},"Phase 3 — Storyboard","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Fstoryboard","docs\u002Fflow-videos\u002F2.pipeline\u002F3.storyboard","i-ph-image-duotone",{"title":58,"path":59,"stem":60,"icon":61},"Phase 4 — Videos","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Fvideos","docs\u002Fflow-videos\u002F2.pipeline\u002F4.videos","i-ph-video-duotone",{"title":63,"path":64,"stem":65,"icon":66},"Phase 5 — Final Assembly","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Ffinal-assembly","docs\u002Fflow-videos\u002F2.pipeline\u002F5.final-assembly","i-ph-scissors-duotone",{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":35},"Settings & Models","i-ph-sliders-duotone","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models","docs\u002Fflow-videos\u002F3.settings-and-models",[73,78,83,88],{"title":74,"path":75,"stem":76,"icon":77},"Settings","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models\u002Fsettings","docs\u002Fflow-videos\u002F3.settings-and-models\u002F0.settings","i-ph-sliders-horizontal-duotone",{"title":79,"path":80,"stem":81,"icon":82},"AI Models & Limits","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models\u002Fmodels-and-limits","docs\u002Fflow-videos\u002F3.settings-and-models\u002F1.models-and-limits","i-ph-cpu-duotone",{"title":84,"path":85,"stem":86,"icon":87},"Option Catalogs","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models\u002Fcatalogs","docs\u002Fflow-videos\u002F3.settings-and-models\u002F2.catalogs","i-ph-list-bullets-duotone",{"title":89,"path":90,"stem":91,"icon":92},"Pipeline Calibration","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models\u002Fcalibration","docs\u002Fflow-videos\u002F3.settings-and-models\u002F3.calibration","i-ph-gauge-duotone",{"title":94,"icon":95,"path":96,"stem":97,"children":98,"page":35},"Reference","i-ph-book-open-duotone","\u002Fdocs\u002Fflow-videos\u002Freference","docs\u002Fflow-videos\u002F4.reference",[99,104,109,114,119,124],{"title":100,"path":101,"stem":102,"icon":103},"Delivered Files","\u002Fdocs\u002Fflow-videos\u002Freference\u002Fdelivered-files","docs\u002Fflow-videos\u002F4.reference\u002F0.delivered-files","i-ph-folder-duotone",{"title":105,"path":106,"stem":107,"icon":108},"Supported Video Types","\u002Fdocs\u002Fflow-videos\u002Freference\u002Fvideo-types","docs\u002Fflow-videos\u002F4.reference\u002F1.video-types","i-ph-television-duotone",{"title":110,"path":111,"stem":112,"icon":113},"What the Tool Does NOT Do","\u002Fdocs\u002Fflow-videos\u002Freference\u002Flimitations","docs\u002Fflow-videos\u002F4.reference\u002F2.limitations","i-ph-prohibit-duotone",{"title":115,"path":116,"stem":117,"icon":118},"Business Models","\u002Fdocs\u002Fflow-videos\u002Freference\u002Fbusiness-models","docs\u002Fflow-videos\u002F4.reference\u002F3.business-models","i-ph-briefcase-duotone",{"title":120,"path":121,"stem":122,"icon":123},"FAQ & Glossary","\u002Fdocs\u002Fflow-videos\u002Freference\u002Ffaq-and-glossary","docs\u002Fflow-videos\u002F4.reference\u002F4.faq-and-glossary","i-ph-question-duotone",{"title":125,"path":126,"stem":127,"icon":128},"Technical and Architectural Audit","\u002Fdocs\u002Fflow-videos\u002Freference\u002Faudit","docs\u002Fflow-videos\u002F4.reference\u002F5.audit","i-ph-shield-check-duotone",{"id":130,"title":131,"author":132,"authorType":133,"body":134,"category":655,"date":656,"description":657,"extension":658,"image":659,"lang":660,"meta":661,"navigation":433,"ogImage":662,"path":663,"readTime":664,"seo":665,"stem":666,"tags":667,"translations":671,"updated":133,"__hash__":675},"blog\u002Fblog\u002Fasync-queues-background-jobs-serverless.md","Asynchronous Processing on Serverless: Cloudflare Queues and Dead Letter Queues","Nuxfire Team",null,{"type":135,"value":136,"toc":650},"minimark",[137,141,144,160,163,168,171,177,204,481,483,487,490,493,514,603,605,609,612,623,634,637,646],[138,139,140],"p",{},"In modern web development, nothing degrades the user experience more than frozen screens waiting on slow operations.",[138,142,143],{},"Whether it is waiting 15 seconds for a language model response (an LLM such as Claude or GPT-4), generating a PDF report or sending hundreds of transactional emails, processing heavy tasks synchronously inside the HTTP request is a guaranteed recipe for timeouts and connection failures.",[138,145,146,147,151,152,155,156,159],{},"In ",[148,149,150],"strong",{},"Nuxfire",", all background processing is handled resiliently by ",[148,153,154],{},"Cloudflare Queues"," and ",[148,157,158],{},"Dead Letter Queues (DLQ)",".",[161,162],"hr",{},[164,165,167],"h2",{"id":166},"the-serverless-producer-consumer-architecture","The Serverless Producer-Consumer Architecture",[138,169,170],{},"In traditional architectures, setting up queues meant hosting RabbitMQ instances or managing Redis BullMQ queues with Node.js workers monitored by PM2.",[138,172,173,174,176],{},"With ",[148,175,154],{},", the infrastructure is 100% serverless:",[178,179,180,192,198],"ol",{},[181,182,183,186,187,191],"li",{},[148,184,185],{},"Producer",": The dashboard or API enqueues messages in milliseconds and returns an immediate response (",[188,189,190],"code",{},"202 Accepted",") to the user.",[181,193,194,197],{},[148,195,196],{},"Queue",": Cloudflare stores the messages with delivery guarantees and concurrency control.",[181,199,200,203],{},[148,201,202],{},"Consumer (Worker)",": A dedicated worker processes batches of messages in the background with automatic retries.",[205,206,211],"pre",{"className":207,"code":208,"language":209,"meta":210,"style":210},"language-typescript shiki shiki-themes material-theme-lighter github-light github-dark monokai","\u002F\u002F Enqueuing an async job from a Nuxt 4 API\nexport default defineEventHandler(async (event) => {\n  const body = await readBody(event);\n  \n  \u002F\u002F Publishes to the Cloudflare queue in under 10ms\n  await env.APP_QUEUE.send({\n    type: \"PROCESS_AI_COMPLETION\",\n    payload: {\n      documentId: body.documentId,\n      prompt: body.prompt\n    },\n    enqueuedAt: Date.now()\n  });\n\n  return { success: true, message: \"Processing started in the background.\" };\n});\n","typescript","",[188,212,213,222,262,292,298,304,328,351,361,378,393,399,418,428,435,471],{"__ignoreMap":210},[214,215,218],"span",{"class":216,"line":217},"line",1,[214,219,221],{"class":220},"ss7Ak","\u002F\u002F Enqueuing an async job from a Nuxt 4 API\n",[214,223,225,229,232,236,240,244,248,252,255,259],{"class":216,"line":224},2,[214,226,228],{"class":227},"sRxSC","export",[214,230,231],{"class":227}," default",[214,233,235],{"class":234},"sD0ED"," defineEventHandler",[214,237,239],{"class":238},"ss--_","(",[214,241,243],{"class":242},"sTNss","async",[214,245,247],{"class":246},"swvn1"," (",[214,249,251],{"class":250},"sQgqH","event",[214,253,254],{"class":246},")",[214,256,258],{"class":257},"srJo8"," =>",[214,260,261],{"class":246}," {\n",[214,263,265,268,272,276,279,282,285,287,289],{"class":216,"line":264},3,[214,266,267],{"class":257},"  const",[214,269,271],{"class":270},"s91G_"," body",[214,273,275],{"class":274},"sGXK2"," =",[214,277,278],{"class":227}," await",[214,280,281],{"class":234}," readBody",[214,283,239],{"class":284},"squCx",[214,286,251],{"class":238},[214,288,254],{"class":284},[214,290,291],{"class":246},";\n",[214,293,295],{"class":216,"line":294},4,[214,296,297],{"class":284},"  \n",[214,299,301],{"class":216,"line":300},5,[214,302,303],{"class":220},"  \u002F\u002F Publishes to the Cloudflare queue in under 10ms\n",[214,305,307,310,313,315,318,320,323,325],{"class":216,"line":306},6,[214,308,309],{"class":227},"  await",[214,311,312],{"class":238}," env",[214,314,159],{"class":246},[214,316,317],{"class":270},"APP_QUEUE",[214,319,159],{"class":246},[214,321,322],{"class":234},"send",[214,324,239],{"class":284},[214,326,327],{"class":246},"{\n",[214,329,331,334,337,341,345,348],{"class":216,"line":330},7,[214,332,333],{"class":284},"    type",[214,335,336],{"class":246},":",[214,338,340],{"class":339},"siCPE"," \"",[214,342,344],{"class":343},"sLACW","PROCESS_AI_COMPLETION",[214,346,347],{"class":339},"\"",[214,349,350],{"class":246},",\n",[214,352,354,357,359],{"class":216,"line":353},8,[214,355,356],{"class":284},"    payload",[214,358,336],{"class":246},[214,360,261],{"class":246},[214,362,364,367,369,371,373,376],{"class":216,"line":363},9,[214,365,366],{"class":284},"      documentId",[214,368,336],{"class":246},[214,370,271],{"class":238},[214,372,159],{"class":246},[214,374,375],{"class":238},"documentId",[214,377,350],{"class":246},[214,379,381,384,386,388,390],{"class":216,"line":380},10,[214,382,383],{"class":284},"      prompt",[214,385,336],{"class":246},[214,387,271],{"class":238},[214,389,159],{"class":246},[214,391,392],{"class":238},"prompt\n",[214,394,396],{"class":216,"line":395},11,[214,397,398],{"class":246},"    },\n",[214,400,402,405,407,410,412,415],{"class":216,"line":401},12,[214,403,404],{"class":284},"    enqueuedAt",[214,406,336],{"class":246},[214,408,409],{"class":238}," Date",[214,411,159],{"class":246},[214,413,414],{"class":234},"now",[214,416,417],{"class":284},"()\n",[214,419,421,424,426],{"class":216,"line":420},13,[214,422,423],{"class":246},"  }",[214,425,254],{"class":284},[214,427,291],{"class":246},[214,429,431],{"class":216,"line":430},14,[214,432,434],{"emptyLinePlaceholder":433},true,"\n",[214,436,438,441,444,447,449,453,456,459,461,463,466,468],{"class":216,"line":437},15,[214,439,440],{"class":227},"  return",[214,442,443],{"class":246}," {",[214,445,446],{"class":284}," success",[214,448,336],{"class":246},[214,450,452],{"class":451},"s8HiA"," true",[214,454,455],{"class":246},",",[214,457,458],{"class":284}," message",[214,460,336],{"class":246},[214,462,340],{"class":339},[214,464,465],{"class":343},"Processing started in the background.",[214,467,347],{"class":339},[214,469,470],{"class":246}," };\n",[214,472,474,477,479],{"class":216,"line":473},16,[214,475,476],{"class":246},"}",[214,478,254],{"class":238},[214,480,291],{"class":246},[161,482],{},[164,484,486],{"id":485},"resilience-with-exponential-backoff-and-dead-letter-queue-dlq","Resilience with Exponential Backoff and Dead Letter Queue (DLQ)",[138,488,489],{},"What if an external AI API or an email provider is temporarily down?",[138,491,492],{},"In Nuxfire, the queues are configured in SST with a strict fault-tolerance policy:",[494,495,496,502,508],"ul",{},[181,497,498,501],{},[148,499,500],{},"Automatic retries",": The consumer retries the message up to 3 times at gradual intervals (Exponential Backoff).",[181,503,504,507],{},[148,505,506],{},"Dead Letter Queue (DLQ)",": If the failure persists after the maximum attempts, the message is not lost! It is automatically sent to a quarantine queue (DLQ).",[181,509,510,513],{},[148,511,512],{},"Inspection and Alerting",": The support team can inspect messages in the DLQ, fix the integration problem and safely re-enqueue the messages.",[205,515,517],{"className":207,"code":516,"language":209,"meta":210,"style":210},"\u002F\u002F infra\u002Fqueue.ts using SST v4\nexport const appQueue = new sst.cloudflare.Queue(\"AppQueue\", {\n  dlq: new sst.cloudflare.Queue(\"AppQueueDLQ\")\n});\n",[188,518,519,524,564,595],{"__ignoreMap":210},[214,520,521],{"class":216,"line":217},[214,522,523],{"class":220},"\u002F\u002F infra\u002Fqueue.ts using SST v4\n",[214,525,526,528,531,534,536,539,542,544,547,549,551,553,555,558,560,562],{"class":216,"line":224},[214,527,228],{"class":227},[214,529,530],{"class":257}," const",[214,532,533],{"class":270}," appQueue",[214,535,275],{"class":274},[214,537,538],{"class":274}," new",[214,540,541],{"class":238}," sst",[214,543,159],{"class":246},[214,545,546],{"class":238},"cloudflare",[214,548,159],{"class":246},[214,550,196],{"class":234},[214,552,239],{"class":238},[214,554,347],{"class":339},[214,556,557],{"class":343},"AppQueue",[214,559,347],{"class":339},[214,561,455],{"class":246},[214,563,261],{"class":246},[214,565,566,569,571,573,575,577,579,581,583,585,587,590,592],{"class":216,"line":264},[214,567,568],{"class":284},"  dlq",[214,570,336],{"class":246},[214,572,538],{"class":274},[214,574,541],{"class":238},[214,576,159],{"class":246},[214,578,546],{"class":238},[214,580,159],{"class":246},[214,582,196],{"class":234},[214,584,239],{"class":238},[214,586,347],{"class":339},[214,588,589],{"class":343},"AppQueueDLQ",[214,591,347],{"class":339},[214,593,594],{"class":238},")\n",[214,596,597,599,601],{"class":216,"line":294},[214,598,476],{"class":246},[214,600,254],{"class":238},[214,602,291],{"class":246},[161,604],{},[164,606,608],{"id":607},"periodic-tasks-with-the-cron-worker","Periodic Tasks with the CRON Worker",[138,610,611],{},"Besides event-driven queues, many SaaS products need scheduled routines:",[494,613,614,617,620],{},[181,615,616],{},"Checking overdue invoices on Stripe.",[181,618,619],{},"Cleaning up expired invitation tokens.",[181,621,622],{},"Consolidating daily AI token usage metrics.",[138,624,625,626,629,630,633],{},"Nuxfire includes a native ",[148,627,628],{},"CRON Worker"," configured in ",[188,631,632],{},"apps\u002Ffunctions",", triggered every hour without depending on external services like Cronhook or cron instances on Linux.",[138,635,636],{},"Build professional distributed systems without operational surprises.",[138,638,639],{},[640,641,643],"a",{"href":642},"\u002F#pricing",[148,644,645],{},"Access the Nuxfire monorepo right now with immediate delivery and support in the VIP Group →",[647,648,649],"style",{},"html pre.shiki code .ss7Ak, html code.shiki .ss7Ak{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit;--shiki-sepia:#88846F;--shiki-sepia-font-style:inherit}html pre.shiki code .sRxSC, html code.shiki .sRxSC{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#F92672;--shiki-sepia-font-style:inherit}html pre.shiki code .sD0ED, html code.shiki .sD0ED{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .ss--_, html code.shiki .ss--_{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sTNss, html code.shiki .sTNss{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .swvn1, html code.shiki .swvn1{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sQgqH, html code.shiki .sQgqH{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit;--shiki-sepia:#FD971F;--shiki-sepia-font-style:italic}html pre.shiki code .srJo8, html code.shiki .srJo8{--shiki-light:#9C3EDA;--shiki-light-font-style:inherit;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .s91G_, html code.shiki .s91G_{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#F8F8F2}html pre.shiki code .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .squCx, html code.shiki .squCx{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .siCPE, html code.shiki .siCPE{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sLACW, html code.shiki .sLACW{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .s8HiA, html code.shiki .s8HiA{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":210,"searchDepth":224,"depth":224,"links":651},[652,653,654],{"id":166,"depth":224,"text":167},{"id":485,"depth":224,"text":486},{"id":607,"depth":224,"text":608},"Distributed Systems","2026-09-15","How to run long tasks, AI calls and bulk email sends without freezing the interface and without hitting HTTP timeouts on Cloudflare.","md","\u002Fimages\u002Fblog\u002Fcloudflare-queues-background-jobs-en.svg","en",{},"\u002Fimages\u002Fblog\u002Fcloudflare-queues-background-jobs-en.png","\u002Fblog\u002Fasync-queues-background-jobs-serverless","7 min",{"title":131,"description":657},"blog\u002Fasync-queues-background-jobs-serverless",[154,668,669,670],"Background Jobs","DLQ","Asynchronous",{"en":672,"pt-br":673,"es":674},"async-queues-background-jobs-serverless","filas-assincronas-jobs-segundo-plano-serverless","colas-asincronas-jobs-segundo-plano-serverless","PXXe_OQYYKRORVlIQ7GIGGOnuCzC3e185sAoQ-OUAa4",1794055329841]