[{"data":1,"prerenderedAt":858},["ShallowReactive",2],{"navigation:en":3,"\u002Fblog\u002Ffilas-assincronas-jobs-segundo-plano-serverless":311},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Nuxfire Docs","\u002Fdocs","docs\u002F0.index",[9,11,152],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-layout-grid",{"title":12,"path":13,"stem":14,"children":15,"icon":151},"SaaS Starter Kit","\u002Fdocs\u002Fsaas-starter-kit","docs\u002F1.saas-starter-kit\u002F0.index",[16,19,63,129],{"title":17,"path":13,"stem":14,"icon":18},"What is the SaaS Starter Kit?","i-lucide-info",{"title":20,"icon":21,"hide":22,"path":23,"stem":24,"children":25,"page":62},"Getting Started","i-lucide-play",true,"\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started","docs\u002F1.saas-starter-kit\u002F1.getting-started",[26,30,34,38,42,46,50,54,58],{"title":27,"path":28,"stem":29},"Quick Start","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fquick-start","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F0.quick-start",{"title":31,"path":32,"stem":33},"Installation","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Finstallation","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F1.installation",{"title":35,"path":36,"stem":37},"Cloudflare Access","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fcloudflare-access","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F2.cloudflare-access",{"title":39,"path":40,"stem":41},"Configuration","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fconfiguration","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F3.configuration",{"title":43,"path":44,"stem":45},"Secrets","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fsecrets","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F4.secrets",{"title":47,"path":48,"stem":49},"Environment Variables","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fenvironment-variables","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F5.environment-variables",{"title":51,"path":52,"stem":53},"Deploy","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fdeploy","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F6.deploy",{"title":55,"path":56,"stem":57},"Local Development","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Flocal-development","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F7.local-development",{"title":59,"path":60,"stem":61},"Project Structure","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fproject-structure","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F8.project-structure",false,{"title":64,"icon":65,"hide":22,"path":66,"stem":67,"children":68,"page":62},"Features","i-lucide-box","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures","docs\u002F1.saas-starter-kit\u002F2.features",[69,73,77,81,85,89,93,97,101,105,109,113,117,121,125],{"title":70,"path":71,"stem":72},"Authentication","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fauth","docs\u002F1.saas-starter-kit\u002F2.features\u002F1.auth",{"title":74,"path":75,"stem":76},"Rate Limiting","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Frate-limiting","docs\u002F1.saas-starter-kit\u002F2.features\u002F10.rate-limiting",{"title":78,"path":79,"stem":80},"WebSockets","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fwebsockets","docs\u002F1.saas-starter-kit\u002F2.features\u002F11.websockets",{"title":82,"path":83,"stem":84},"Blog","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fblog","docs\u002F1.saas-starter-kit\u002F2.features\u002F14.blog",{"title":86,"path":87,"stem":88},"Documentation","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fdocumentation","docs\u002F1.saas-starter-kit\u002F2.features\u002F15.documentation",{"title":90,"path":91,"stem":92},"Analytics","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fanalytics","docs\u002F1.saas-starter-kit\u002F2.features\u002F16.analytics",{"title":94,"path":95,"stem":96},"Platform Admin Console","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fplatform-admin","docs\u002F1.saas-starter-kit\u002F2.features\u002F17.platform-admin",{"title":98,"path":99,"stem":100},"Database","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fdatabase","docs\u002F1.saas-starter-kit\u002F2.features\u002F2.database",{"title":102,"path":103,"stem":104},"Payments & Billing","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fpayments","docs\u002F1.saas-starter-kit\u002F2.features\u002F3.payments",{"title":106,"path":107,"stem":108},"Emails","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Femails","docs\u002F1.saas-starter-kit\u002F2.features\u002F4.emails",{"title":110,"path":111,"stem":112},"Notifications","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fnotifications","docs\u002F1.saas-starter-kit\u002F2.features\u002F5.notifications",{"title":114,"path":115,"stem":116},"Role-Based Access Control","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Frbac","docs\u002F1.saas-starter-kit\u002F2.features\u002F6.rbac",{"title":118,"path":119,"stem":120},"Async Jobs","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fasync-jobs","docs\u002F1.saas-starter-kit\u002F2.features\u002F7.async-jobs",{"title":122,"path":123,"stem":124},"Storage","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fstorage","docs\u002F1.saas-starter-kit\u002F2.features\u002F8.storage",{"title":126,"path":127,"stem":128},"Internationalization","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Finternationalization","docs\u002F1.saas-starter-kit\u002F2.features\u002F9.internationalization",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":62},"Concepts","i-lucide-graduation-cap","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts","docs\u002F1.saas-starter-kit\u002F3.concepts",[135,139,143,147],{"title":136,"path":137,"stem":138},"Technology Stack","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Ftech-stack","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F0.tech-stack",{"title":140,"path":141,"stem":142},"SST.dev","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fsst","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F1.sst",{"title":144,"path":145,"stem":146},"NuxtHub","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fnuxt-hub","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F2.nuxt-hub",{"title":148,"path":149,"stem":150},"Design System & Branding","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fdesign-system","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F3.design-system","i-lucide-zap",{"title":153,"path":154,"stem":155,"children":156,"icon":159},"Fireskills","\u002Fdocs\u002Ffireskills","docs\u002F2.fireskills\u002F0.index",[157,160,219,249,275,293],{"title":158,"path":154,"stem":155,"icon":159},"What is Fireskills?","i-lucide-flame",{"title":20,"icon":21,"hide":22,"path":161,"stem":162,"children":163,"page":62},"\u002Fdocs\u002Ffireskills\u002Fgetting-started","docs\u002F2.fireskills\u002F1.getting-started",[164,167,171,175,179,183,187,191,195,199,203,207,211,215],{"title":27,"path":165,"stem":166},"\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fquick-start","docs\u002F2.fireskills\u002F1.getting-started\u002F00.quick-start",{"title":168,"path":169,"stem":170},"Workflow & Governance","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fworkflow","docs\u002F2.fireskills\u002F1.getting-started\u002F01.workflow",{"title":172,"path":173,"stem":174},"Project Context","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fproject-context","docs\u002F2.fireskills\u002F1.getting-started\u002F02.project-context",{"title":176,"path":177,"stem":178},"Step 0: Setup","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-setup","docs\u002F2.fireskills\u002F1.getting-started\u002F03.step-setup",{"title":180,"path":181,"stem":182},"Step 1: Inbox","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-inbox","docs\u002F2.fireskills\u002F1.getting-started\u002F04.step-inbox",{"title":184,"path":185,"stem":186},"Step 2: Backlog","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-backlog","docs\u002F2.fireskills\u002F1.getting-started\u002F05.step-backlog",{"title":188,"path":189,"stem":190},"Step 3: Specify","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-specify","docs\u002F2.fireskills\u002F1.getting-started\u002F06.step-specify",{"title":192,"path":193,"stem":194},"Step 4: Validate","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-validate","docs\u002F2.fireskills\u002F1.getting-started\u002F07.step-validate",{"title":196,"path":197,"stem":198},"Step 5: Tasks","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-tasks","docs\u002F2.fireskills\u002F1.getting-started\u002F08.step-tasks",{"title":200,"path":201,"stem":202},"Step 6: TDD\u002FBDD","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-tdd-bdd","docs\u002F2.fireskills\u002F1.getting-started\u002F09.step-tdd-bdd",{"title":204,"path":205,"stem":206},"Step 7: Implement","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-implement","docs\u002F2.fireskills\u002F1.getting-started\u002F10.step-implement",{"title":208,"path":209,"stem":210},"Step 8: Documentator","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-documentator","docs\u002F2.fireskills\u002F1.getting-started\u002F11.step-documentator",{"title":212,"path":213,"stem":214},"Late Changes","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Flate-changes","docs\u002F2.fireskills\u002F1.getting-started\u002F12.late-changes",{"title":216,"path":217,"stem":218},"Other Entry Points","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fother-entry-points","docs\u002F2.fireskills\u002F1.getting-started\u002F13.other-entry-points",{"title":220,"icon":221,"hide":22,"path":222,"stem":223,"children":224,"page":62},"Methodology","i-lucide-git-branch","\u002Fdocs\u002Ffireskills\u002Fmethodology","docs\u002F2.fireskills\u002F2.methodology",[225,229,233,237,241,245],{"title":226,"path":227,"stem":228},"The Three Acts","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fthree-acts","docs\u002F2.fireskills\u002F2.methodology\u002F0.three-acts",{"title":230,"path":231,"stem":232},"The Three Gates","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fthree-gates","docs\u002F2.fireskills\u002F2.methodology\u002F1.three-gates",{"title":234,"path":235,"stem":236},"The Canonical Spec","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fcanonical-spec","docs\u002F2.fireskills\u002F2.methodology\u002F2.canonical-spec",{"title":238,"path":239,"stem":240},"Lifecycle States","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Flifecycle-states","docs\u002F2.fireskills\u002F2.methodology\u002F3.lifecycle-states",{"title":242,"path":243,"stem":244},"Effort Scale","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Feffort-scale","docs\u002F2.fireskills\u002F2.methodology\u002F4.effort-scale",{"title":246,"path":247,"stem":248},"Milestones & Governance","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fgovernance-and-milestones","docs\u002F2.fireskills\u002F2.methodology\u002F5.governance-and-milestones",{"title":250,"icon":251,"hide":22,"path":252,"stem":253,"children":254,"page":62},"Skills","i-lucide-layers","\u002Fdocs\u002Ffireskills\u002Fskills","docs\u002F2.fireskills\u002F3.skills",[255,259,263,267,271],{"title":256,"path":257,"stem":258},"Catalog","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fcatalog","docs\u002F2.fireskills\u002F3.skills\u002F0.catalog",{"title":260,"path":261,"stem":262},"Act I: Define","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-1-define","docs\u002F2.fireskills\u002F3.skills\u002F1.act-1-define",{"title":264,"path":265,"stem":266},"Act II: Design & Prove","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-2-design-prove","docs\u002F2.fireskills\u002F3.skills\u002F2.act-2-design-prove",{"title":268,"path":269,"stem":270},"Act III: Deliver","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-3-deliver","docs\u002F2.fireskills\u002F3.skills\u002F3.act-3-deliver",{"title":272,"path":273,"stem":274},"Governance & Decisions","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fgovernance-and-decisions","docs\u002F2.fireskills\u002F3.skills\u002F4.governance-and-decisions",{"title":276,"icon":277,"hide":22,"path":278,"stem":279,"children":280,"page":62},"Specialists","i-lucide-sparkles","\u002Fdocs\u002Ffireskills\u002Fspecialists","docs\u002F2.fireskills\u002F4.specialists",[281,285,289],{"title":282,"path":283,"stem":284},"Overview","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Foverview","docs\u002F2.fireskills\u002F4.specialists\u002F0.overview",{"title":286,"path":287,"stem":288},"Nuxfire Stack","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Fnuxfire-stack","docs\u002F2.fireskills\u002F4.specialists\u002F1.nuxfire-stack",{"title":290,"path":291,"stem":292},"Engineering Specialists","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Fengineering-specialists","docs\u002F2.fireskills\u002F4.specialists\u002F2.engineering-specialists",{"title":294,"icon":295,"hide":22,"path":296,"stem":297,"children":298,"page":62},"CLI & Tooling","i-lucide-terminal","\u002Fdocs\u002Ffireskills\u002Fcli","docs\u002F2.fireskills\u002F5.cli",[299,303,307],{"title":300,"path":301,"stem":302},"CLI Overview","\u002Fdocs\u002Ffireskills\u002Fcli\u002Foverview","docs\u002F2.fireskills\u002F5.cli\u002F0.overview",{"title":304,"path":305,"stem":306},"Commands","\u002Fdocs\u002Ffireskills\u002Fcli\u002Fcommands","docs\u002F2.fireskills\u002F5.cli\u002F1.commands",{"title":308,"path":309,"stem":310},"Safety Scripts","\u002Fdocs\u002Ffireskills\u002Fcli\u002Fgovernance-scripts","docs\u002F2.fireskills\u002F5.cli\u002F2.governance-scripts",{"id":312,"title":313,"author":314,"authorType":315,"body":316,"category":837,"date":838,"description":839,"extension":840,"image":841,"lang":842,"meta":843,"navigation":22,"ogImage":844,"path":845,"readTime":846,"seo":847,"stem":848,"tags":849,"translations":853,"updated":315,"__hash__":857},"blog\u002Fblog\u002Ffilas-assincronas-jobs-segundo-plano-serverless.md","Processamento Assíncrono no Serverless: Cloudflare Queues e Dead Letter Queues","Equipe Nuxfire",null,{"type":317,"value":318,"toc":832},"minimark",[319,323,326,342,345,350,353,359,386,662,664,668,671,674,695,785,787,791,794,805,816,819,828],[320,321,322],"p",{},"No desenvolvimento de aplicações web modernas, nada degrada mais a experiência do usuário do que telas travadas esperando operações demoradas.",[320,324,325],{},"Seja aguardando uma resposta de 15 segundos de um modelo de linguagem (LLM como Claude ou GPT-4), gerando um relatório em PDF ou disparando centenas de e-mails transacionais, processar tarefas pesadas de forma síncrona dentro da requisição HTTP é uma receita garantida para timeouts e falhas de conexão.",[320,327,328,329,333,334,337,338,341],{},"No ",[330,331,332],"strong",{},"Nuxfire",", todo o processamento em segundo plano é gerenciado de forma resiliente por ",[330,335,336],{},"Cloudflare Queues"," e ",[330,339,340],{},"Dead Letter Queues (DLQ)",".",[343,344],"hr",{},[346,347,349],"h2",{"id":348},"a-arquitetura-produtor-consumidor-serverless","A Arquitetura Produtor-Consumidor Serverless",[320,351,352],{},"Em arquiteturas tradicionais, configurar filas exigia hospedar instâncias RabbitMQ ou gerenciar filas Redis BullMQ com workers Node.js monitorados por PM2.",[320,354,355,356,358],{},"Com a ",[330,357,336],{},", a infraestrutura é 100% serverless:",[360,361,362,374,380],"ol",{},[363,364,365,368,369,373],"li",{},[330,366,367],{},"Produtor",": O dashboard ou API enfileira mensagens em milissegundos e devolve uma resposta imediata (",[370,371,372],"code",{},"202 Accepted",") para o usuário.",[363,375,376,379],{},[330,377,378],{},"Fila (Queue)",": A Cloudflare armazena as mensagens com garantia de entrega e controle de concorrência.",[363,381,382,385],{},[330,383,384],{},"Consumidor (Worker)",": Um worker dedicado processa os lotes de mensagens em segundo plano com retry automático.",[387,388,393],"pre",{"className":389,"code":390,"language":391,"meta":392,"style":392},"language-typescript shiki shiki-themes material-theme-lighter github-light github-dark monokai","\u002F\u002F Enfileirando um job assíncrono a partir de uma API Nuxt 4\nexport default defineEventHandler(async (event) => {\n  const body = await readBody(event);\n  \n  \u002F\u002F Publica na fila da Cloudflare em menos de 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: \"Processamento iniciado em segundo plano.\" };\n});\n","typescript","",[370,394,395,404,444,474,480,486,510,533,543,560,575,581,600,610,616,652],{"__ignoreMap":392},[396,397,400],"span",{"class":398,"line":399},"line",1,[396,401,403],{"class":402},"ss7Ak","\u002F\u002F Enfileirando um job assíncrono a partir de uma API Nuxt 4\n",[396,405,407,411,414,418,422,426,430,434,437,441],{"class":398,"line":406},2,[396,408,410],{"class":409},"sRxSC","export",[396,412,413],{"class":409}," default",[396,415,417],{"class":416},"sD0ED"," defineEventHandler",[396,419,421],{"class":420},"ss--_","(",[396,423,425],{"class":424},"sTNss","async",[396,427,429],{"class":428},"swvn1"," (",[396,431,433],{"class":432},"sQgqH","event",[396,435,436],{"class":428},")",[396,438,440],{"class":439},"srJo8"," =>",[396,442,443],{"class":428}," {\n",[396,445,447,450,454,458,461,464,467,469,471],{"class":398,"line":446},3,[396,448,449],{"class":439},"  const",[396,451,453],{"class":452},"s91G_"," body",[396,455,457],{"class":456},"sGXK2"," =",[396,459,460],{"class":409}," await",[396,462,463],{"class":416}," readBody",[396,465,421],{"class":466},"squCx",[396,468,433],{"class":420},[396,470,436],{"class":466},[396,472,473],{"class":428},";\n",[396,475,477],{"class":398,"line":476},4,[396,478,479],{"class":466},"  \n",[396,481,483],{"class":398,"line":482},5,[396,484,485],{"class":402},"  \u002F\u002F Publica na fila da Cloudflare em menos de 10ms\n",[396,487,489,492,495,497,500,502,505,507],{"class":398,"line":488},6,[396,490,491],{"class":409},"  await",[396,493,494],{"class":420}," env",[396,496,341],{"class":428},[396,498,499],{"class":452},"APP_QUEUE",[396,501,341],{"class":428},[396,503,504],{"class":416},"send",[396,506,421],{"class":466},[396,508,509],{"class":428},"{\n",[396,511,513,516,519,523,527,530],{"class":398,"line":512},7,[396,514,515],{"class":466},"    type",[396,517,518],{"class":428},":",[396,520,522],{"class":521},"siCPE"," \"",[396,524,526],{"class":525},"sLACW","PROCESS_AI_COMPLETION",[396,528,529],{"class":521},"\"",[396,531,532],{"class":428},",\n",[396,534,536,539,541],{"class":398,"line":535},8,[396,537,538],{"class":466},"    payload",[396,540,518],{"class":428},[396,542,443],{"class":428},[396,544,546,549,551,553,555,558],{"class":398,"line":545},9,[396,547,548],{"class":466},"      documentId",[396,550,518],{"class":428},[396,552,453],{"class":420},[396,554,341],{"class":428},[396,556,557],{"class":420},"documentId",[396,559,532],{"class":428},[396,561,563,566,568,570,572],{"class":398,"line":562},10,[396,564,565],{"class":466},"      prompt",[396,567,518],{"class":428},[396,569,453],{"class":420},[396,571,341],{"class":428},[396,573,574],{"class":420},"prompt\n",[396,576,578],{"class":398,"line":577},11,[396,579,580],{"class":428},"    },\n",[396,582,584,587,589,592,594,597],{"class":398,"line":583},12,[396,585,586],{"class":466},"    enqueuedAt",[396,588,518],{"class":428},[396,590,591],{"class":420}," Date",[396,593,341],{"class":428},[396,595,596],{"class":416},"now",[396,598,599],{"class":466},"()\n",[396,601,603,606,608],{"class":398,"line":602},13,[396,604,605],{"class":428},"  }",[396,607,436],{"class":466},[396,609,473],{"class":428},[396,611,613],{"class":398,"line":612},14,[396,614,615],{"emptyLinePlaceholder":22},"\n",[396,617,619,622,625,628,630,634,637,640,642,644,647,649],{"class":398,"line":618},15,[396,620,621],{"class":409},"  return",[396,623,624],{"class":428}," {",[396,626,627],{"class":466}," success",[396,629,518],{"class":428},[396,631,633],{"class":632},"s8HiA"," true",[396,635,636],{"class":428},",",[396,638,639],{"class":466}," message",[396,641,518],{"class":428},[396,643,522],{"class":521},[396,645,646],{"class":525},"Processamento iniciado em segundo plano.",[396,648,529],{"class":521},[396,650,651],{"class":428}," };\n",[396,653,655,658,660],{"class":398,"line":654},16,[396,656,657],{"class":428},"}",[396,659,436],{"class":420},[396,661,473],{"class":428},[343,663],{},[346,665,667],{"id":666},"resiliência-com-backoff-exponencial-e-dead-letter-queue-dlq","Resiliência com Backoff Exponencial e Dead Letter Queue (DLQ)",[320,669,670],{},"E se uma API externa de IA ou um provedor de e-mail estiver temporariamente fora do ar?",[320,672,673],{},"No Nuxfire, as filas são configuradas no SST com política estrita de tolerância a falhas:",[675,676,677,683,689],"ul",{},[363,678,679,682],{},[330,680,681],{},"Tentativas automáticas",": O consumidor tenta reprocessar a mensagem até 3 vezes com intervalos graduais (Backoff Exponencial).",[363,684,685,688],{},[330,686,687],{},"Dead Letter Queue (DLQ)",": Caso a falha persista após as tentativas máximas, a mensagem não é perdida! Ela é enviada automaticamente para uma fila de quarentena (DLQ).",[363,690,691,694],{},[330,692,693],{},"Inspeção e Alerta",": A equipe de suporte pode inspecionar mensagens na DLQ, corrigir o problema de integração e reenfileirar as mensagens com segurança.",[387,696,698],{"className":389,"code":697,"language":391,"meta":392,"style":392},"\u002F\u002F infra\u002Fqueue.ts usando SST v4\nexport const appQueue = new sst.cloudflare.Queue(\"AppQueue\", {\n  dlq: new sst.cloudflare.Queue(\"AppQueueDLQ\")\n});\n",[370,699,700,705,746,777],{"__ignoreMap":392},[396,701,702],{"class":398,"line":399},[396,703,704],{"class":402},"\u002F\u002F infra\u002Fqueue.ts usando SST v4\n",[396,706,707,709,712,715,717,720,723,725,728,730,733,735,737,740,742,744],{"class":398,"line":406},[396,708,410],{"class":409},[396,710,711],{"class":439}," const",[396,713,714],{"class":452}," appQueue",[396,716,457],{"class":456},[396,718,719],{"class":456}," new",[396,721,722],{"class":420}," sst",[396,724,341],{"class":428},[396,726,727],{"class":420},"cloudflare",[396,729,341],{"class":428},[396,731,732],{"class":416},"Queue",[396,734,421],{"class":420},[396,736,529],{"class":521},[396,738,739],{"class":525},"AppQueue",[396,741,529],{"class":521},[396,743,636],{"class":428},[396,745,443],{"class":428},[396,747,748,751,753,755,757,759,761,763,765,767,769,772,774],{"class":398,"line":446},[396,749,750],{"class":466},"  dlq",[396,752,518],{"class":428},[396,754,719],{"class":456},[396,756,722],{"class":420},[396,758,341],{"class":428},[396,760,727],{"class":420},[396,762,341],{"class":428},[396,764,732],{"class":416},[396,766,421],{"class":420},[396,768,529],{"class":521},[396,770,771],{"class":525},"AppQueueDLQ",[396,773,529],{"class":521},[396,775,776],{"class":420},")\n",[396,778,779,781,783],{"class":398,"line":476},[396,780,657],{"class":428},[396,782,436],{"class":420},[396,784,473],{"class":428},[343,786],{},[346,788,790],{"id":789},"tarefas-periódicas-com-o-cron-worker","Tarefas Periódicas com o CRON Worker",[320,792,793],{},"Além de filas orientadas a eventos, muitos SaaS precisam de rotinas agendadas:",[675,795,796,799,802],{},[363,797,798],{},"Verificar faturas vencidas no Stripe.",[363,800,801],{},"Limpar tokens de convite expirados.",[363,803,804],{},"Consolidar métricas de uso diário de tokens de IA.",[320,806,807,808,811,812,815],{},"O Nuxfire inclui um ",[330,809,810],{},"CRON Worker"," nativo configurado em ",[370,813,814],{},"apps\u002Ffunctions",", disparado a cada hora sem depender de serviços externos como Cronhook ou instâncias de cron no Linux.",[320,817,818],{},"Construa sistemas distribuídos profissionais sem surpresas operacionais.",[320,820,821],{},[822,823,825],"a",{"href":824},"\u002Fpt-br#pricing",[330,826,827],{},"Acesse o monorepo do Nuxfire agora mesmo com entrega imediata e suporte no Grupo VIP →",[829,830,831],"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":392,"searchDepth":406,"depth":406,"links":833},[834,835,836],{"id":348,"depth":406,"text":349},{"id":666,"depth":406,"text":667},{"id":789,"depth":406,"text":790},"Sistemas Distribuídos","2026-09-15","Como executar tarefas demoradas, chamadas de IA e disparos de e-mails em lote sem travar a interface e sem estourar timeouts HTTP na Cloudflare.","md","\u002Fimages\u002Fblog\u002Fcloudflare-queues-background-jobs.svg","pt-br",{},"\u002Fimages\u002Fblog\u002Fcloudflare-queues-background-jobs.png","\u002Fblog\u002Ffilas-assincronas-jobs-segundo-plano-serverless","7 min",{"title":313,"description":839},"blog\u002Ffilas-assincronas-jobs-segundo-plano-serverless",[336,850,851,852],"Background Jobs","DLQ","Assíncrono",{"en":854,"pt-br":855,"es":856},"async-queues-background-jobs-serverless","filas-assincronas-jobs-segundo-plano-serverless","colas-asincronas-jobs-segundo-plano-serverless","ALnBVyGEU1HWOJqtWnCvfDPA-UADFJHhGUiCfzV-oak",1790707502096]