[{"data":1,"prerenderedAt":3001},["ShallowReactive",2],{"navigation":3,"docs-path-index":268,"-docs-modules-queue-strategies":348,"-docs-modules-queue-strategies-surround":2996},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":56},"Docs","i-lucide-book-marked","\u002Fdocs","docs",[10,26,57,229,250],{"title":11,"path":12,"stem":13,"children":14,"icon":25},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[15,17,21],{"title":16,"path":12,"stem":13},"Introduction",{"title":18,"path":19,"stem":20},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",{"title":22,"path":23,"stem":24},"Examples","\u002Fdocs\u002Fgetting-started\u002Fexamples","docs\u002F1.getting-started\u002F3.examples","i-lucide-rocket",{"title":27,"icon":28,"path":29,"stem":30,"children":31,"page":56},"Core features","i-lucide-square-function","\u002Fdocs\u002Fcore-features","docs\u002F2.core-features",[32,36,40,44,48,52],{"title":33,"path":34,"stem":35},"Configuration","\u002Fdocs\u002Fcore-features\u002Fconfiguration","docs\u002F2.core-features\u002F0.configuration",{"title":37,"path":38,"stem":39},"Dependency Injection","\u002Fdocs\u002Fcore-features\u002Fcontainer","docs\u002F2.core-features\u002F1.container",{"title":41,"path":42,"stem":43},"Controllers","\u002Fdocs\u002Fcore-features\u002Fcontrollers","docs\u002F2.core-features\u002F2.controllers",{"title":45,"path":46,"stem":47},"Middlewares","\u002Fdocs\u002Fcore-features\u002Fmiddlewares","docs\u002F2.core-features\u002F3.middlewares",{"title":49,"path":50,"stem":51},"Validation","\u002Fdocs\u002Fcore-features\u002Fvalidation","docs\u002F2.core-features\u002F4.validation",{"title":53,"path":54,"stem":55},"Introspection","\u002Fdocs\u002Fcore-features\u002Fintrospection","docs\u002F2.core-features\u002F5.introspection",false,{"title":58,"icon":59,"defaultOpen":60,"path":61,"stem":62,"children":63,"page":56},"Modules","i-lucide-boxes",true,"\u002Fdocs\u002Fmodules","docs\u002F3.modules",[64,81,92,108,127,142,150,165,176,191,210,218],{"title":65,"icon":56,"defaultOpen":56,"path":66,"stem":67,"children":68,"page":56},"Auth","\u002Fdocs\u002Fmodules\u002Fauth","docs\u002F3.modules\u002F1.auth",[69,73,77],{"title":70,"path":71,"stem":72},"Overview","\u002Fdocs\u002Fmodules\u002Fauth\u002Foverview","docs\u002F3.modules\u002F1.auth\u002F0.overview",{"title":74,"path":75,"stem":76},"Decorators","\u002Fdocs\u002Fmodules\u002Fauth\u002Fdecorators","docs\u002F3.modules\u002F1.auth\u002F1.decorators",{"title":78,"path":79,"stem":80},"API Reference","\u002Fdocs\u002Fmodules\u002Fauth\u002Fapi","docs\u002F3.modules\u002F1.auth\u002F2.api",{"title":82,"icon":56,"defaultOpen":56,"path":83,"stem":84,"children":85,"page":56},"Devtools","\u002Fdocs\u002Fmodules\u002Fdevtools","docs\u002F3.modules\u002F10.devtools",[86,89],{"title":70,"path":87,"stem":88},"\u002Fdocs\u002Fmodules\u002Fdevtools\u002Foverview","docs\u002F3.modules\u002F10.devtools\u002F0.overview",{"title":33,"path":90,"stem":91},"\u002Fdocs\u002Fmodules\u002Fdevtools\u002Fconfiguration","docs\u002F3.modules\u002F10.devtools\u002F1.configuration",{"title":93,"path":94,"stem":95,"children":96,"page":56},"Telemetry","\u002Fdocs\u002Fmodules\u002Ftelemetry","docs\u002F3.modules\u002F11.telemetry",[97,100,104],{"title":70,"path":98,"stem":99},"\u002Fdocs\u002Fmodules\u002Ftelemetry\u002Foverview","docs\u002F3.modules\u002F11.telemetry\u002F0.overview",{"title":101,"path":102,"stem":103},"API","\u002Fdocs\u002Fmodules\u002Ftelemetry\u002Fapi","docs\u002F3.modules\u002F11.telemetry\u002F1.api",{"title":105,"path":106,"stem":107},"Instrumentation","\u002Fdocs\u002Fmodules\u002Ftelemetry\u002Finstrumentation","docs\u002F3.modules\u002F11.telemetry\u002F2.instrumentation",{"title":109,"path":110,"stem":111,"children":112,"page":56},"Queue","\u002Fdocs\u002Fmodules\u002Fqueue","docs\u002F3.modules\u002F12.queue",[113,116,120,124],{"title":70,"path":114,"stem":115},"\u002Fdocs\u002Fmodules\u002Fqueue\u002Foverview","docs\u002F3.modules\u002F12.queue\u002F0.overview",{"title":117,"path":118,"stem":119},"Consumers","\u002Fdocs\u002Fmodules\u002Fqueue\u002Fconsumers","docs\u002F3.modules\u002F12.queue\u002F1.consumers",{"title":121,"path":122,"stem":123},"Strategies","\u002Fdocs\u002Fmodules\u002Fqueue\u002Fstrategies","docs\u002F3.modules\u002F12.queue\u002F2.strategies",{"title":101,"path":125,"stem":126},"\u002Fdocs\u002Fmodules\u002Fqueue\u002Fapi","docs\u002F3.modules\u002F12.queue\u002F3.api",{"title":128,"icon":56,"defaultOpen":56,"path":129,"stem":130,"children":131,"page":56},"Logger","\u002Fdocs\u002Fmodules\u002Flogger","docs\u002F3.modules\u002F2.logger",[132,135,139],{"title":70,"path":133,"stem":134},"\u002Fdocs\u002Fmodules\u002Flogger\u002Foverview","docs\u002F3.modules\u002F2.logger\u002F0.overview",{"title":136,"path":137,"stem":138},"Drains & Adapters","\u002Fdocs\u002Fmodules\u002Flogger\u002Fdrivers","docs\u002F3.modules\u002F2.logger\u002F1.drivers",{"title":101,"path":140,"stem":141},"\u002Fdocs\u002Fmodules\u002Flogger\u002Fapi","docs\u002F3.modules\u002F2.logger\u002F2.api",{"title":143,"icon":56,"defaultOpen":56,"path":144,"stem":145,"children":146,"page":56},"Serverless","\u002Fdocs\u002Fmodules\u002Fserverless","docs\u002F3.modules\u002F3.serverless",[147],{"title":70,"path":148,"stem":149},"\u002Fdocs\u002Fmodules\u002Fserverless\u002Foverview","docs\u002F3.modules\u002F3.serverless\u002F0.overview",{"title":151,"icon":56,"defaultOpen":56,"path":152,"stem":153,"children":154,"page":56},"Storage","\u002Fdocs\u002Fmodules\u002Fstorage","docs\u002F3.modules\u002F4.storage",[155,158,162],{"title":70,"path":156,"stem":157},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Foverview","docs\u002F3.modules\u002F4.storage\u002F0.overview",{"title":159,"path":160,"stem":161},"Drivers","\u002Fdocs\u002Fmodules\u002Fstorage\u002Fdrivers","docs\u002F3.modules\u002F4.storage\u002F1.drivers",{"title":101,"path":163,"stem":164},"\u002Fdocs\u002Fmodules\u002Fstorage\u002Fapi","docs\u002F3.modules\u002F4.storage\u002F2.api",{"title":166,"icon":56,"defaultOpen":56,"path":167,"stem":168,"children":169,"page":56},"Web Sockets","\u002Fdocs\u002Fmodules\u002Fweb-sockets","docs\u002F3.modules\u002F5.web-sockets",[170,173],{"title":70,"path":171,"stem":172},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Foverview","docs\u002F3.modules\u002F5.web-sockets\u002F0.overview",{"title":101,"path":174,"stem":175},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002Fapi","docs\u002F3.modules\u002F5.web-sockets\u002F1.api",{"title":177,"icon":56,"defaultOpen":56,"path":178,"stem":179,"children":180,"page":56},"Schema","\u002Fdocs\u002Fmodules\u002Fschema","docs\u002F3.modules\u002F6.schema",[181,184,187],{"title":70,"path":182,"stem":183},"\u002Fdocs\u002Fmodules\u002Fschema\u002Foverview","docs\u002F3.modules\u002F6.schema\u002F0.overview",{"title":74,"path":185,"stem":186},"\u002Fdocs\u002Fmodules\u002Fschema\u002Fdecorators","docs\u002F3.modules\u002F6.schema\u002F1.decorators",{"title":188,"path":189,"stem":190},"Scalar","\u002Fdocs\u002Fmodules\u002Fschema\u002Fscalar","docs\u002F3.modules\u002F6.schema\u002F2.scalar",{"title":192,"icon":56,"defaultOpen":56,"path":193,"stem":194,"children":195,"page":56},"Nitro","\u002Fdocs\u002Fmodules\u002Fnitro","docs\u002F3.modules\u002F7.nitro",[196,199,202,206],{"title":70,"path":197,"stem":198},"\u002Fdocs\u002Fmodules\u002Fnitro\u002Foverview","docs\u002F3.modules\u002F7.nitro\u002F0.overview",{"title":151,"path":200,"stem":201},"\u002Fdocs\u002Fmodules\u002Fnitro\u002Fstorage","docs\u002F3.modules\u002F7.nitro\u002F1.storage",{"title":203,"path":204,"stem":205},"File-Based Routes","\u002Fdocs\u002Fmodules\u002Fnitro\u002Ffile-based-routes","docs\u002F3.modules\u002F7.nitro\u002F2.file-based-routes",{"title":207,"path":208,"stem":209},"Middleware","\u002Fdocs\u002Fmodules\u002Fnitro\u002Fmiddleware","docs\u002F3.modules\u002F7.nitro\u002F3.middleware",{"title":211,"icon":56,"defaultOpen":56,"path":212,"stem":213,"children":214,"page":56},"Vite","\u002Fdocs\u002Fmodules\u002Fvite","docs\u002F3.modules\u002F8.vite",[215],{"title":70,"path":216,"stem":217},"\u002Fdocs\u002Fmodules\u002Fvite\u002Foverview","docs\u002F3.modules\u002F8.vite\u002F0.overview",{"title":219,"icon":56,"defaultOpen":56,"path":220,"stem":221,"children":222,"page":56},"Cache","\u002Fdocs\u002Fmodules\u002Fcache","docs\u002F3.modules\u002F9.cache",[223,226],{"title":70,"path":224,"stem":225},"\u002Fdocs\u002Fmodules\u002Fcache\u002Foverview","docs\u002F3.modules\u002F9.cache\u002F0.overview",{"title":101,"path":227,"stem":228},"\u002Fdocs\u002Fmodules\u002Fcache\u002Fapi","docs\u002F3.modules\u002F9.cache\u002F1.api",{"title":230,"icon":231,"path":232,"stem":233,"children":234,"page":56},"Deployment","i-lucide-cloud-upload","\u002Fdocs\u002Fdeployment","docs\u002F4.deployment",[235,238,242,246],{"title":70,"path":236,"stem":237},"\u002Fdocs\u002Fdeployment\u002Foverview","docs\u002F4.deployment\u002F0.overview",{"title":239,"path":240,"stem":241},"Vercel","\u002Fdocs\u002Fdeployment\u002Fvercel","docs\u002F4.deployment\u002F1.vercel",{"title":243,"path":244,"stem":245},"AWS Lambda","\u002Fdocs\u002Fdeployment\u002Faws-lambda","docs\u002F4.deployment\u002F2.aws-lambda",{"title":247,"path":248,"stem":249},"Azure Functions","\u002Fdocs\u002Fdeployment\u002Fazure-functions","docs\u002F4.deployment\u002F3.azure-functions",{"title":251,"icon":252,"path":253,"stem":254,"children":255,"page":56},"Advanced","i-lucide-brain","\u002Fdocs\u002Fadvanced","docs\u002F99.advanced",[256,260,264],{"title":257,"path":258,"stem":259},"Custom Decorator","\u002Fdocs\u002Fadvanced\u002Fcustom-decorator","docs\u002F99.advanced\u002F1.custom-decorator",{"title":261,"path":262,"stem":263},"Plugins","\u002Fdocs\u002Fadvanced\u002Fcustom-plugin","docs\u002F99.advanced\u002F2.custom-plugin",{"title":265,"path":266,"stem":267},"Custom CLI Command","\u002Fdocs\u002Fadvanced\u002Fcustom-cli-command","docs\u002F99.advanced\u002F3.custom-cli-command",[269,271,273,274,275,276,278,279,280,281,282,283,284,286,288,289,290,291,293,294,295,296,297,298,299,300,301,302,304,305,306,307,309,310,312,313,314,315,317,318,319,321,322,323,324,326,327,328,329,330,332,333,335,336,337,339,340,341,342,343,345,346,347],{"path":270},"\u002Fdocs\u002F.navigation",{"path":272},"\u002Fdocs\u002Fgetting-started\u002F.navigation",{"path":12},{"path":19},{"path":23},{"path":277},"\u002Fdocs\u002Fcore-features\u002F.navigation",{"path":34},{"path":38},{"path":42},{"path":46},{"path":50},{"path":54},{"path":285},"\u002Fdocs\u002Fmodules\u002F.navigation",{"path":287},"\u002Fdocs\u002Fmodules\u002Fauth\u002F.navigation",{"path":71},{"path":75},{"path":79},{"path":292},"\u002Fdocs\u002Fmodules\u002Fdevtools\u002F.navigation",{"path":87},{"path":90},{"path":98},{"path":102},{"path":106},{"path":114},{"path":118},{"path":122},{"path":125},{"path":303},"\u002Fdocs\u002Fmodules\u002Flogger\u002F.navigation",{"path":133},{"path":137},{"path":140},{"path":308},"\u002Fdocs\u002Fmodules\u002Fserverless\u002F.navigation",{"path":148},{"path":311},"\u002Fdocs\u002Fmodules\u002Fstorage\u002F.navigation",{"path":156},{"path":160},{"path":163},{"path":316},"\u002Fdocs\u002Fmodules\u002Fweb-sockets\u002F.navigation",{"path":171},{"path":174},{"path":320},"\u002Fdocs\u002Fmodules\u002Fschema\u002F.navigation",{"path":182},{"path":185},{"path":189},{"path":325},"\u002Fdocs\u002Fmodules\u002Fnitro\u002F.navigation",{"path":197},{"path":200},{"path":204},{"path":208},{"path":331},"\u002Fdocs\u002Fmodules\u002Fvite\u002F.navigation",{"path":216},{"path":334},"\u002Fdocs\u002Fmodules\u002Fcache\u002F.navigation",{"path":224},{"path":227},{"path":338},"\u002Fdocs\u002Fdeployment\u002F.navigation",{"path":236},{"path":240},{"path":244},{"path":248},{"path":344},"\u002Fdocs\u002Fadvanced\u002F.navigation",{"path":258},{"path":262},{"path":266},{"id":349,"title":121,"body":350,"description":2990,"extension":2991,"links":2992,"meta":2993,"navigation":60,"path":122,"seo":2994,"stem":123,"__hash__":2995},"docs\u002Fdocs\u002F3.modules\u002F12.queue\u002F2.strategies.md",{"type":351,"value":352,"toc":2981},"minimark",[353,357,362,470,476,480,483,651,662,669,796,856,860,863,926,929,1077,1081,1084,1245,1314,1331,1338,1344,1348,1355,1480,1565,1568,1611,1615,1622,1755,1849,1851,1889,1893,1904,2959,2962,2977],[354,355,356],"p",{},"A strategy owns the connection to one broker and translates between its vocabulary and the module's job model. Everything else - routing, validation, retries, timeouts, hooks and counters - lives in the manager, so a strategy stays small and every transport behaves the same way.",[358,359,361],"h2",{"id":360},"what-each-transport-can-do","What each transport can do",[363,364,365,386],"table",{},[366,367,368],"thead",{},[369,370,371,374,377,380,383],"tr",{},[372,373],"th",{},[372,375,376],{},"Memory",[372,378,379],{},"BullMQ",[372,381,382],{},"RabbitMQ",[372,384,385],{},"Kafka",[387,388,389,405,418,431,444,457],"tbody",{},[369,390,391,395,398,401,403],{},[392,393,394],"td",{},"Native retries",[392,396,397],{},"no",[392,399,400],{},"yes",[392,402,397],{},[392,404,397],{},[369,406,407,410,412,414,416],{},[392,408,409],{},"Native delay",[392,411,400],{},[392,413,400],{},[392,415,397],{},[392,417,397],{},[369,419,420,423,425,427,429],{},[392,421,422],{},"Priority",[392,424,400],{},[392,426,400],{},[392,428,400],{},[392,430,397],{},[369,432,433,436,438,440,442],{},[392,434,435],{},"Progress",[392,437,400],{},[392,439,400],{},[392,441,397],{},[392,443,397],{},[369,445,446,449,451,453,455],{},[392,447,448],{},"Counters",[392,450,400],{},[392,452,400],{},[392,454,400],{},[392,456,400],{},[369,458,459,462,464,466,468],{},[392,460,461],{},"Peek at contents",[392,463,400],{},[392,465,400],{},[392,467,397],{},[392,469,397],{},[354,471,472,475],{},[473,474,397],"code",{}," does not mean unsupported: everything the transport cannot do is either emulated by the manager, or documented below as a real limit. The manager only stops emulating retries when the transport owns them, which is how a BullMQ job keeps its attempts in Redis instead of being republished.",[358,477,479],{"id":478},"mounting","Mounting",[354,481,482],{},"Every strategy is mounted by name, so an application can talk to several brokers at once.",[484,485,490],"pre",{"className":486,"code":487,"language":488,"meta":489,"style":489},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","app.addPlugin(QueuePlugin, {\n  strategies: [\n    defineQueueStrategy({ strategy: BullMQStrategy, initOptions: { connection } }),\n    defineQueueStrategy({ name: 'events', strategy: KafkaStrategy, initOptions: { client, groupId } }),\n  ],\n});\n","ts","",[473,491,492,518,531,576,633,641],{"__ignoreMap":489},[493,494,497,501,505,509,512,515],"span",{"class":495,"line":496},"line",1,[493,498,500],{"class":499},"sTEyZ","app",[493,502,504],{"class":503},"sMK4o",".",[493,506,508],{"class":507},"s2Zo4","addPlugin",[493,510,511],{"class":499},"(QueuePlugin",[493,513,514],{"class":503},",",[493,516,517],{"class":503}," {\n",[493,519,521,525,528],{"class":495,"line":520},2,[493,522,524],{"class":523},"swJcz","  strategies",[493,526,527],{"class":503},":",[493,529,530],{"class":499}," [\n",[493,532,534,537,540,543,546,548,551,553,556,558,561,564,567,570,573],{"class":495,"line":533},3,[493,535,536],{"class":507},"    defineQueueStrategy",[493,538,539],{"class":499},"(",[493,541,542],{"class":503},"{",[493,544,545],{"class":523}," strategy",[493,547,527],{"class":503},[493,549,550],{"class":499}," BullMQStrategy",[493,552,514],{"class":503},[493,554,555],{"class":523}," initOptions",[493,557,527],{"class":503},[493,559,560],{"class":503}," {",[493,562,563],{"class":499}," connection ",[493,565,566],{"class":503},"}",[493,568,569],{"class":503}," }",[493,571,572],{"class":499},")",[493,574,575],{"class":503},",\n",[493,577,579,581,583,585,588,590,593,597,600,602,604,606,609,611,613,615,617,620,622,625,627,629,631],{"class":495,"line":578},4,[493,580,536],{"class":507},[493,582,539],{"class":499},[493,584,542],{"class":503},[493,586,587],{"class":523}," name",[493,589,527],{"class":503},[493,591,592],{"class":503}," '",[493,594,596],{"class":595},"sfazB","events",[493,598,599],{"class":503},"'",[493,601,514],{"class":503},[493,603,545],{"class":523},[493,605,527],{"class":503},[493,607,608],{"class":499}," KafkaStrategy",[493,610,514],{"class":503},[493,612,555],{"class":523},[493,614,527],{"class":503},[493,616,560],{"class":503},[493,618,619],{"class":499}," client",[493,621,514],{"class":503},[493,623,624],{"class":499}," groupId ",[493,626,566],{"class":503},[493,628,569],{"class":503},[493,630,572],{"class":499},[493,632,575],{"class":503},[493,634,636,639],{"class":495,"line":635},5,[493,637,638],{"class":499},"  ]",[493,640,575],{"class":503},[493,642,644,646,648],{"class":495,"line":643},6,[493,645,566],{"class":503},[493,647,572],{"class":499},[493,649,650],{"class":503},";\n",[354,652,653,654,657,658,661],{},"Each entry declares the options of its own strategy, and ",[473,655,656],{},"defineQueueStrategy()"," is what makes TypeScript check that pairing. Without it the entry still works, but ",[473,659,660],{},"initOptions"," goes unchecked: a plain array gives TypeScript nothing to infer the strategy from.",[354,663,664,665,668],{},"The first mount has no name, which makes it ",[473,666,667],{},"default",". Anything that does not name a strategy uses it:",[484,670,672],{"className":486,"code":671,"language":488,"meta":489,"style":489},"await queue.add({ queue: 'emails', job: 'welcome', payload });                     \u002F\u002F default\nawait queue.add({ strategy: 'events', queue: 'orders', job: 'placed', payload });  \u002F\u002F kafka\n",[473,673,674,733],{"__ignoreMap":489},[493,675,676,680,683,685,688,690,692,694,696,698,701,703,705,708,710,712,715,717,719,722,724,726,729],{"class":495,"line":496},[493,677,679],{"class":678},"s7zQu","await",[493,681,682],{"class":499}," queue",[493,684,504],{"class":503},[493,686,687],{"class":507},"add",[493,689,539],{"class":499},[493,691,542],{"class":503},[493,693,682],{"class":523},[493,695,527],{"class":503},[493,697,592],{"class":503},[493,699,700],{"class":595},"emails",[493,702,599],{"class":503},[493,704,514],{"class":503},[493,706,707],{"class":523}," job",[493,709,527],{"class":503},[493,711,592],{"class":503},[493,713,714],{"class":595},"welcome",[493,716,599],{"class":503},[493,718,514],{"class":503},[493,720,721],{"class":499}," payload ",[493,723,566],{"class":503},[493,725,572],{"class":499},[493,727,728],{"class":503},";",[493,730,732],{"class":731},"sHwdD","                     \u002F\u002F default\n",[493,734,735,737,739,741,743,745,747,749,751,753,755,757,759,761,763,765,768,770,772,774,776,778,781,783,785,787,789,791,793],{"class":495,"line":520},[493,736,679],{"class":678},[493,738,682],{"class":499},[493,740,504],{"class":503},[493,742,687],{"class":507},[493,744,539],{"class":499},[493,746,542],{"class":503},[493,748,545],{"class":523},[493,750,527],{"class":503},[493,752,592],{"class":503},[493,754,596],{"class":595},[493,756,599],{"class":503},[493,758,514],{"class":503},[493,760,682],{"class":523},[493,762,527],{"class":503},[493,764,592],{"class":503},[493,766,767],{"class":595},"orders",[493,769,599],{"class":503},[493,771,514],{"class":503},[493,773,707],{"class":523},[493,775,527],{"class":503},[493,777,592],{"class":503},[493,779,780],{"class":595},"placed",[493,782,599],{"class":503},[493,784,514],{"class":503},[493,786,721],{"class":499},[493,788,566],{"class":503},[493,790,572],{"class":499},[493,792,728],{"class":503},[493,794,795],{"class":731},"  \u002F\u002F kafka\n",[484,797,799],{"className":486,"code":798,"language":488,"meta":489,"style":489},"@Consumer({ queue: 'orders', strategy: 'events' })\nexport class OrderConsumer {}\n",[473,800,801,840],{"__ignoreMap":489},[493,802,803,806,809,811,813,815,817,819,821,823,825,827,829,831,833,835,837],{"class":495,"line":496},[493,804,805],{"class":503},"@",[493,807,808],{"class":507},"Consumer",[493,810,539],{"class":499},[493,812,542],{"class":503},[493,814,682],{"class":523},[493,816,527],{"class":503},[493,818,592],{"class":503},[493,820,767],{"class":595},[493,822,599],{"class":503},[493,824,514],{"class":503},[493,826,545],{"class":523},[493,828,527],{"class":503},[493,830,592],{"class":503},[493,832,596],{"class":595},[493,834,599],{"class":503},[493,836,569],{"class":503},[493,838,839],{"class":499},")\n",[493,841,842,845,849,853],{"class":495,"line":520},[493,843,844],{"class":678},"export",[493,846,848],{"class":847},"spNyl"," class",[493,850,852],{"class":851},"sBMFI"," OrderConsumer",[493,854,855],{"class":503}," {}\n",[358,857,859],{"id":858},"memorystrategy","MemoryStrategy",[354,861,862],{},"Jobs live in the running process and are gone when it stops. This is the strategy for tests, for examples and for work that may be lost on a restart. It is also the reference implementation: delays, priorities and progress behave exactly as documented.",[484,864,866],{"className":486,"code":865,"language":488,"meta":489,"style":489},"import { MemoryStrategy } from '@vercube\u002Fqueue\u002Fstrategies\u002FMemoryStrategy';\n\nawait queueManager.mount({ strategy: MemoryStrategy });\n",[473,867,868,892,897],{"__ignoreMap":489},[493,869,870,873,875,878,880,883,885,888,890],{"class":495,"line":496},[493,871,872],{"class":678},"import",[493,874,560],{"class":503},[493,876,877],{"class":499}," MemoryStrategy",[493,879,569],{"class":503},[493,881,882],{"class":678}," from",[493,884,592],{"class":503},[493,886,887],{"class":595},"@vercube\u002Fqueue\u002Fstrategies\u002FMemoryStrategy",[493,889,599],{"class":503},[493,891,650],{"class":503},[493,893,894],{"class":495,"line":520},[493,895,896],{"emptyLinePlaceholder":60},"\n",[493,898,899,901,904,906,909,911,913,915,917,920,922,924],{"class":495,"line":533},[493,900,679],{"class":678},[493,902,903],{"class":499}," queueManager",[493,905,504],{"class":503},[493,907,908],{"class":507},"mount",[493,910,539],{"class":499},[493,912,542],{"class":503},[493,914,545],{"class":523},[493,916,527],{"class":503},[493,918,919],{"class":499}," MemoryStrategy ",[493,921,566],{"class":503},[493,923,572],{"class":499},[493,925,650],{"class":503},[354,927,928],{},"It needs no options. For tests it adds one method the other strategies do not have:",[484,930,932],{"className":486,"code":931,"language":488,"meta":489,"style":489},"const memory = queueManager.getStrategy() as MemoryStrategy;\n\nawait queueManager.add({ queue: 'emails', job: 'welcome', payload: { userId: '1' } });\nawait memory.idle(); \u002F\u002F resolves once nothing is waiting, delayed or running\n\nexpect(sent).toHaveLength(1);\n",[473,933,934,962,966,1031,1051,1055],{"__ignoreMap":489},[493,935,936,939,942,945,947,949,952,955,958,960],{"class":495,"line":496},[493,937,938],{"class":847},"const",[493,940,941],{"class":499}," memory ",[493,943,944],{"class":503},"=",[493,946,903],{"class":499},[493,948,504],{"class":503},[493,950,951],{"class":507},"getStrategy",[493,953,954],{"class":499},"() ",[493,956,957],{"class":678},"as",[493,959,877],{"class":851},[493,961,650],{"class":503},[493,963,964],{"class":495,"line":520},[493,965,896],{"emptyLinePlaceholder":60},[493,967,968,970,972,974,976,978,980,982,984,986,988,990,992,994,996,998,1000,1002,1004,1007,1009,1011,1014,1016,1018,1021,1023,1025,1027,1029],{"class":495,"line":533},[493,969,679],{"class":678},[493,971,903],{"class":499},[493,973,504],{"class":503},[493,975,687],{"class":507},[493,977,539],{"class":499},[493,979,542],{"class":503},[493,981,682],{"class":523},[493,983,527],{"class":503},[493,985,592],{"class":503},[493,987,700],{"class":595},[493,989,599],{"class":503},[493,991,514],{"class":503},[493,993,707],{"class":523},[493,995,527],{"class":503},[493,997,592],{"class":503},[493,999,714],{"class":595},[493,1001,599],{"class":503},[493,1003,514],{"class":503},[493,1005,1006],{"class":523}," payload",[493,1008,527],{"class":503},[493,1010,560],{"class":503},[493,1012,1013],{"class":523}," userId",[493,1015,527],{"class":503},[493,1017,592],{"class":503},[493,1019,1020],{"class":595},"1",[493,1022,599],{"class":503},[493,1024,569],{"class":503},[493,1026,569],{"class":503},[493,1028,572],{"class":499},[493,1030,650],{"class":503},[493,1032,1033,1035,1038,1040,1043,1046,1048],{"class":495,"line":578},[493,1034,679],{"class":678},[493,1036,1037],{"class":499}," memory",[493,1039,504],{"class":503},[493,1041,1042],{"class":507},"idle",[493,1044,1045],{"class":499},"()",[493,1047,728],{"class":503},[493,1049,1050],{"class":731}," \u002F\u002F resolves once nothing is waiting, delayed or running\n",[493,1052,1053],{"class":495,"line":635},[493,1054,896],{"emptyLinePlaceholder":60},[493,1056,1057,1060,1063,1065,1068,1070,1073,1075],{"class":495,"line":643},[493,1058,1059],{"class":507},"expect",[493,1061,1062],{"class":499},"(sent)",[493,1064,504],{"class":503},[493,1066,1067],{"class":507},"toHaveLength",[493,1069,539],{"class":499},[493,1071,1020],{"class":1072},"sbssI",[493,1074,572],{"class":499},[493,1076,650],{"class":503},[358,1078,1080],{"id":1079},"bullmqstrategy","BullMQStrategy",[354,1082,1083],{},"Redis keeps the jobs and BullMQ owns their lifecycle: attempts, backoff, delays, priorities, progress and the completed and failed sets.",[484,1085,1087],{"className":486,"code":1086,"language":488,"meta":489,"style":489},"import { BullMQStrategy } from '@vercube\u002Fqueue\u002Fstrategies\u002FBullMQStrategy';\n\nawait queueManager.mount({\n  strategy: BullMQStrategy,\n  initOptions: {\n    connection: { host: '127.0.0.1', port: 6379 },\n    prefix: 'my-app',\n    defaultJobOptions: { removeOnComplete: 1000, removeOnFail: 5000 },\n  },\n});\n",[473,1088,1089,1110,1114,1129,1140,1149,1183,1200,1230,1236],{"__ignoreMap":489},[493,1090,1091,1093,1095,1097,1099,1101,1103,1106,1108],{"class":495,"line":496},[493,1092,872],{"class":678},[493,1094,560],{"class":503},[493,1096,550],{"class":499},[493,1098,569],{"class":503},[493,1100,882],{"class":678},[493,1102,592],{"class":503},[493,1104,1105],{"class":595},"@vercube\u002Fqueue\u002Fstrategies\u002FBullMQStrategy",[493,1107,599],{"class":503},[493,1109,650],{"class":503},[493,1111,1112],{"class":495,"line":520},[493,1113,896],{"emptyLinePlaceholder":60},[493,1115,1116,1118,1120,1122,1124,1126],{"class":495,"line":533},[493,1117,679],{"class":678},[493,1119,903],{"class":499},[493,1121,504],{"class":503},[493,1123,908],{"class":507},[493,1125,539],{"class":499},[493,1127,1128],{"class":503},"{\n",[493,1130,1131,1134,1136,1138],{"class":495,"line":578},[493,1132,1133],{"class":523},"  strategy",[493,1135,527],{"class":503},[493,1137,550],{"class":499},[493,1139,575],{"class":503},[493,1141,1142,1145,1147],{"class":495,"line":635},[493,1143,1144],{"class":523},"  initOptions",[493,1146,527],{"class":503},[493,1148,517],{"class":503},[493,1150,1151,1154,1156,1158,1161,1163,1165,1168,1170,1172,1175,1177,1180],{"class":495,"line":643},[493,1152,1153],{"class":523},"    connection",[493,1155,527],{"class":503},[493,1157,560],{"class":503},[493,1159,1160],{"class":523}," host",[493,1162,527],{"class":503},[493,1164,592],{"class":503},[493,1166,1167],{"class":595},"127.0.0.1",[493,1169,599],{"class":503},[493,1171,514],{"class":503},[493,1173,1174],{"class":523}," port",[493,1176,527],{"class":503},[493,1178,1179],{"class":1072}," 6379",[493,1181,1182],{"class":503}," },\n",[493,1184,1186,1189,1191,1193,1196,1198],{"class":495,"line":1185},7,[493,1187,1188],{"class":523},"    prefix",[493,1190,527],{"class":503},[493,1192,592],{"class":503},[493,1194,1195],{"class":595},"my-app",[493,1197,599],{"class":503},[493,1199,575],{"class":503},[493,1201,1203,1206,1208,1210,1213,1215,1218,1220,1223,1225,1228],{"class":495,"line":1202},8,[493,1204,1205],{"class":523},"    defaultJobOptions",[493,1207,527],{"class":503},[493,1209,560],{"class":503},[493,1211,1212],{"class":523}," removeOnComplete",[493,1214,527],{"class":503},[493,1216,1217],{"class":1072}," 1000",[493,1219,514],{"class":503},[493,1221,1222],{"class":523}," removeOnFail",[493,1224,527],{"class":503},[493,1226,1227],{"class":1072}," 5000",[493,1229,1182],{"class":503},[493,1231,1233],{"class":495,"line":1232},9,[493,1234,1235],{"class":503},"  },\n",[493,1237,1239,1241,1243],{"class":495,"line":1238},10,[493,1240,566],{"class":503},[493,1242,572],{"class":499},[493,1244,650],{"class":503},[363,1246,1247,1257],{},[366,1248,1249],{},[369,1250,1251,1254],{},[372,1252,1253],{},"Option",[372,1255,1256],{},"Description",[387,1258,1259,1269,1279,1289,1302],{},[369,1260,1261,1266],{},[392,1262,1263],{},[473,1264,1265],{},"connection",[392,1267,1268],{},"Redis connection options, or an existing ioredis client. Required.",[369,1270,1271,1276],{},[392,1272,1273],{},[473,1274,1275],{},"prefix",[392,1277,1278],{},"Key prefix every queue lives under.",[369,1280,1281,1286],{},[392,1282,1283],{},[473,1284,1285],{},"defaultJobOptions",[392,1287,1288],{},"BullMQ job options applied to every published job.",[369,1290,1291,1296],{},[392,1292,1293],{},[473,1294,1295],{},"queueOptions",[392,1297,1298,1299,1301],{},"Extra options for every ",[473,1300,109],{}," the strategy creates.",[369,1303,1304,1309],{},[392,1305,1306],{},[473,1307,1308],{},"workerOptions",[392,1310,1298,1311,1301],{},[473,1312,1313],{},"Worker",[1315,1316,1317],"warning",{},[354,1318,1319,1320,1323,1324,1327,1328,504],{},"Retries belong to the broker here, and BullMQ reads them from the job, not from the worker. ",[473,1321,1322],{},"attempts"," on ",[473,1325,1326],{},"@Job()"," is only a fallback for jobs published without any, so pass them when adding the job: ",[473,1329,1330],{},"add({ ..., options: { attempts: 3, backoff: { type: 'exponential', delay: 1000 } } })",[354,1332,1333,1334,1337],{},"Jobs are stored as ",[473,1335,1336],{},"{ payload, headers }"," so the module's headers survive the round trip. A job added by another BullMQ producer, with plain data, is read as the payload itself.",[354,1339,1340,1343],{},[473,1341,1342],{},"peek()"," reads the waiting, delayed and failed sets straight from Redis, which makes the failed set browsable with the data and the stack trace of every job that gave up.",[358,1345,1347],{"id":1346},"rabbitmqstrategy","RabbitMQStrategy",[354,1349,1350,1351,1354],{},"Jobs are ordinary AMQP messages: the job name travels in the message ",[473,1352,1353],{},"type"," property, the module's bookkeeping in the headers, and the payload as JSON. Queues are declared as durable, and messages are published as persistent.",[484,1356,1358],{"className":486,"code":1357,"language":488,"meta":489,"style":489},"import { RabbitMQStrategy } from '@vercube\u002Fqueue\u002Fstrategies\u002FRabbitMQStrategy';\n\nawait queueManager.mount({\n  strategy: RabbitMQStrategy,\n  initOptions: {\n    url: 'amqp:\u002F\u002Flocalhost',\n    queueOptions: { durable: true, deadLetterExchange: 'failed' },\n  },\n});\n",[473,1359,1360,1382,1386,1400,1410,1418,1434,1468,1472],{"__ignoreMap":489},[493,1361,1362,1364,1366,1369,1371,1373,1375,1378,1380],{"class":495,"line":496},[493,1363,872],{"class":678},[493,1365,560],{"class":503},[493,1367,1368],{"class":499}," RabbitMQStrategy",[493,1370,569],{"class":503},[493,1372,882],{"class":678},[493,1374,592],{"class":503},[493,1376,1377],{"class":595},"@vercube\u002Fqueue\u002Fstrategies\u002FRabbitMQStrategy",[493,1379,599],{"class":503},[493,1381,650],{"class":503},[493,1383,1384],{"class":495,"line":520},[493,1385,896],{"emptyLinePlaceholder":60},[493,1387,1388,1390,1392,1394,1396,1398],{"class":495,"line":533},[493,1389,679],{"class":678},[493,1391,903],{"class":499},[493,1393,504],{"class":503},[493,1395,908],{"class":507},[493,1397,539],{"class":499},[493,1399,1128],{"class":503},[493,1401,1402,1404,1406,1408],{"class":495,"line":578},[493,1403,1133],{"class":523},[493,1405,527],{"class":503},[493,1407,1368],{"class":499},[493,1409,575],{"class":503},[493,1411,1412,1414,1416],{"class":495,"line":635},[493,1413,1144],{"class":523},[493,1415,527],{"class":503},[493,1417,517],{"class":503},[493,1419,1420,1423,1425,1427,1430,1432],{"class":495,"line":643},[493,1421,1422],{"class":523},"    url",[493,1424,527],{"class":503},[493,1426,592],{"class":503},[493,1428,1429],{"class":595},"amqp:\u002F\u002Flocalhost",[493,1431,599],{"class":503},[493,1433,575],{"class":503},[493,1435,1436,1439,1441,1443,1446,1448,1452,1454,1457,1459,1461,1464,1466],{"class":495,"line":1185},[493,1437,1438],{"class":523},"    queueOptions",[493,1440,527],{"class":503},[493,1442,560],{"class":503},[493,1444,1445],{"class":523}," durable",[493,1447,527],{"class":503},[493,1449,1451],{"class":1450},"sfNiH"," true",[493,1453,514],{"class":503},[493,1455,1456],{"class":523}," deadLetterExchange",[493,1458,527],{"class":503},[493,1460,592],{"class":503},[493,1462,1463],{"class":595},"failed",[493,1465,599],{"class":503},[493,1467,1182],{"class":503},[493,1469,1470],{"class":495,"line":1202},[493,1471,1235],{"class":503},[493,1473,1474,1476,1478],{"class":495,"line":1232},[493,1475,566],{"class":503},[493,1477,572],{"class":499},[493,1479,650],{"class":503},[363,1481,1482,1490],{},[366,1483,1484],{},[369,1485,1486,1488],{},[372,1487,1253],{},[372,1489,1256],{},[387,1491,1492,1506,1516,1530,1542,1555],{},[369,1493,1494,1499],{},[392,1495,1496],{},[473,1497,1498],{},"url",[392,1500,1501,1502,1505],{},"Broker to connect to, as an ",[473,1503,1504],{},"amqp:\u002F\u002F"," URL or as connection fields. Required.",[369,1507,1508,1513],{},[392,1509,1510],{},[473,1511,1512],{},"socketOptions",[392,1514,1515],{},"Socket options handed to amqplib.",[369,1517,1518,1523],{},[392,1519,1520],{},[473,1521,1522],{},"recovery",[392,1524,1525,1526,1529],{},"Automatic reconnection, on by default. Pass options to tune the backoff, or ",[473,1527,1528],{},"false"," to fail fast.",[369,1531,1532,1536],{},[392,1533,1534],{},[473,1535,1295],{},[392,1537,1538,1539,504],{},"Options every queue is asserted with. Defaults to ",[473,1540,1541],{},"{ durable: true }",[369,1543,1544,1549],{},[392,1545,1546],{},[473,1547,1548],{},"publishOptions",[392,1550,1551,1552,504],{},"Options every message is published with. Defaults to ",[473,1553,1554],{},"{ persistent: true }",[369,1556,1557,1562],{},[392,1558,1559],{},[473,1560,1561],{},"prefetch",[392,1563,1564],{},"Unacknowledged messages a consumer may hold. Defaults to the consumer concurrency.",[354,1566,1567],{},"Things worth knowing:",[1569,1570,1571,1575,1593,1596,1599,1605],"ul",{},[1572,1573,1574],"li",{},"A job whose attempts are exhausted is nacked without requeue, so it lands wherever the queue's dead letter exchange points. Declare one to keep failures instead of dropping them.",[1572,1576,1577,1578,1580,1581,1584,1585,1588,1589,504],{},"The job name travels in the ",[473,1579,1353],{}," property. A message put on the queue by another application has none, so it arrives as ",[473,1582,1583],{},"unknown",": handle it with ",[473,1586,1587],{},"@AnyJob()",", described in ",[1590,1591,1592],"a",{"href":118},"consumers",[1572,1594,1595],{},"Delays are kept by the manager on a timer, not by the broker, because a plain RabbitMQ has no delayed delivery. A process that stops before the timer fires loses the pending retry.",[1572,1597,1598],{},"Each consumed queue gets its own channel, so its prefetch is its own.",[1572,1600,1601,1602,504],{},"Priorities only take effect on queues declared with ",[473,1603,1604],{},"maxPriority",[1572,1606,1607,1608,1610],{},"The queue cannot be peeked: looking at a message means taking delivery of it. ",[473,1609,1342],{}," returns nothing rather than perturbing your queue, and the devtools panel says so.",[358,1612,1614],{"id":1613},"kafkastrategy","KafkaStrategy",[354,1616,1617,1618,1621],{},"A queue is a topic. The job name travels in the ",[473,1619,1620],{},"x-job"," header and the payload is JSON.",[484,1623,1625],{"className":486,"code":1624,"language":488,"meta":489,"style":489},"import { KafkaStrategy } from '@vercube\u002Fqueue\u002Fstrategies\u002FKafkaStrategy';\n\nawait queueManager.mount({\n  strategy: KafkaStrategy,\n  initOptions: {\n    client: { clientId: 'orders', brokers: ['localhost:9092'] },\n    groupId: 'orders-workers',\n  },\n});\n",[473,1626,1627,1648,1652,1666,1676,1684,1727,1743,1747],{"__ignoreMap":489},[493,1628,1629,1631,1633,1635,1637,1639,1641,1644,1646],{"class":495,"line":496},[493,1630,872],{"class":678},[493,1632,560],{"class":503},[493,1634,608],{"class":499},[493,1636,569],{"class":503},[493,1638,882],{"class":678},[493,1640,592],{"class":503},[493,1642,1643],{"class":595},"@vercube\u002Fqueue\u002Fstrategies\u002FKafkaStrategy",[493,1645,599],{"class":503},[493,1647,650],{"class":503},[493,1649,1650],{"class":495,"line":520},[493,1651,896],{"emptyLinePlaceholder":60},[493,1653,1654,1656,1658,1660,1662,1664],{"class":495,"line":533},[493,1655,679],{"class":678},[493,1657,903],{"class":499},[493,1659,504],{"class":503},[493,1661,908],{"class":507},[493,1663,539],{"class":499},[493,1665,1128],{"class":503},[493,1667,1668,1670,1672,1674],{"class":495,"line":578},[493,1669,1133],{"class":523},[493,1671,527],{"class":503},[493,1673,608],{"class":499},[493,1675,575],{"class":503},[493,1677,1678,1680,1682],{"class":495,"line":635},[493,1679,1144],{"class":523},[493,1681,527],{"class":503},[493,1683,517],{"class":503},[493,1685,1686,1689,1691,1693,1696,1698,1700,1702,1704,1706,1709,1711,1714,1716,1719,1721,1724],{"class":495,"line":643},[493,1687,1688],{"class":523},"    client",[493,1690,527],{"class":503},[493,1692,560],{"class":503},[493,1694,1695],{"class":523}," clientId",[493,1697,527],{"class":503},[493,1699,592],{"class":503},[493,1701,767],{"class":595},[493,1703,599],{"class":503},[493,1705,514],{"class":503},[493,1707,1708],{"class":523}," brokers",[493,1710,527],{"class":503},[493,1712,1713],{"class":499}," [",[493,1715,599],{"class":503},[493,1717,1718],{"class":595},"localhost:9092",[493,1720,599],{"class":503},[493,1722,1723],{"class":499},"] ",[493,1725,1726],{"class":503},"},\n",[493,1728,1729,1732,1734,1736,1739,1741],{"class":495,"line":1185},[493,1730,1731],{"class":523},"    groupId",[493,1733,527],{"class":503},[493,1735,592],{"class":503},[493,1737,1738],{"class":595},"orders-workers",[493,1740,599],{"class":503},[493,1742,575],{"class":503},[493,1744,1745],{"class":495,"line":1202},[493,1746,1235],{"class":503},[493,1748,1749,1751,1753],{"class":495,"line":1232},[493,1750,566],{"class":503},[493,1752,572],{"class":499},[493,1754,650],{"class":503},[363,1756,1757,1765],{},[366,1758,1759],{},[369,1760,1761,1763],{},[372,1762,1253],{},[372,1764,1256],{},[387,1766,1767,1777,1787,1797,1807,1820,1830],{},[369,1768,1769,1774],{},[392,1770,1771],{},[473,1772,1773],{},"client",[392,1775,1776],{},"kafkajs client configuration: brokers, client id, ssl, sasl. Required.",[369,1778,1779,1784],{},[392,1780,1781],{},[473,1782,1783],{},"groupId",[392,1785,1786],{},"Consumer group every consumer of this strategy joins. Required to consume.",[369,1788,1789,1794],{},[392,1790,1791],{},[473,1792,1793],{},"producer",[392,1795,1796],{},"Extra producer configuration.",[369,1798,1799,1804],{},[392,1800,1801],{},[473,1802,1803],{},"consumer",[392,1805,1806],{},"Extra consumer configuration, the group id excluded.",[369,1808,1809,1814],{},[392,1810,1811],{},[473,1812,1813],{},"send",[392,1815,1816,1817,504],{},"Send options applied to every produced record, such as ",[473,1818,1819],{},"acks",[369,1821,1822,1827],{},[392,1823,1824],{},[473,1825,1826],{},"fromBeginning",[392,1828,1829],{},"Start from the earliest offset when the group has no committed one. Defaults to false.",[369,1831,1832,1837],{},[392,1833,1834],{},[473,1835,1836],{},"onFailure",[392,1838,1839,1842,1843,1846,1847,504],{},[473,1840,1841],{},"skip"," logs a job the manager gave up on and moves the offset, ",[473,1844,1845],{},"crash"," stops the consumer. Defaults to ",[473,1848,1841],{},[354,1850,1567],{},[1569,1852,1853,1862,1872,1877,1883],{},[1572,1854,1855,1856,1858,1859,1861],{},"Kafka commits offsets rather than acknowledging single messages, so a failed job cannot be singled out. With the default ",[473,1857,1841],{},", the offset moves on and the failure is logged and counted. With ",[473,1860,1845],{},", the consumer stops and the partition waits, which is the right choice only when no job may ever be skipped.",[1572,1863,1864,1865,1868,1869,504],{},"Ordering is per partition. Use the ",[473,1866,1867],{},"key"," job option to keep related jobs on the same partition: ",[473,1870,1871],{},"add({ ..., options: { key: order.id } })",[1572,1873,1874,1875,504],{},"Counters report how far the consumer group is behind the end of the topic, which needs a ",[473,1876,1783],{},[1572,1878,1879,1882],{},[473,1880,1881],{},"publishMany()"," produces the whole batch in a single request.",[1572,1884,1885,1886,1888],{},"A topic cannot be peeked without joining it with a throwaway consumer group, so ",[473,1887,1342],{}," returns nothing.",[358,1890,1892],{"id":1891},"writing-your-own-strategy","Writing your own strategy",[354,1894,1895,1896,1899,1900,1903],{},"Extend ",[473,1897,1898],{},"QueueStrategy"," and implement four methods. Report what the transport can do through ",[473,1901,1902],{},"capabilities",", and the manager fills in the rest.",[484,1905,1907],{"className":486,"code":1906,"language":488,"meta":489,"style":489},"import { QueueStrategy } from '@vercube\u002Fqueue';\nimport type { QueueTypes } from '@vercube\u002Fqueue';\n\nexport interface HttpStrategyOptions {\n  endpoint: string;\n}\n\nexport class HttpStrategy extends QueueStrategy\u003CHttpStrategyOptions> {\n  public readonly transport = 'http';\n\n  private fEndpoint: string = '';\n\n  private fSources: Map\u003Cstring, EventSource> = new Map();\n\n  public override get capabilities(): QueueTypes.Capabilities {\n    return { retries: false, delay: false, priority: false, progress: false, stats: false, peek: false };\n  }\n\n  public initialize(options: HttpStrategyOptions): void {\n    this.fEndpoint = options.endpoint;\n  }\n\n  public async publish(request: QueueTypes.PublishRequest): Promise\u003CQueueTypes.JobRef> {\n    const response = await fetch(this.fEndpoint, {\n      method: 'POST',\n      headers: { 'content-type': 'application\u002Fjson', ...request.headers },\n      body: JSON.stringify(request.payload),\n    });\n\n    \u002F\u002F fetch() resolves for 4xx and 5xx too, and returning a JobRef for one would\n    \u002F\u002F report a job that was never accepted as published.\n    if (!response.ok) {\n      throw new Error(`The endpoint refused the job: ${response.status} ${response.statusText}`);\n    }\n\n    return { id: response.headers.get('x-id') ?? '', queue: request.queue, job: request.job, strategy: this.transport };\n  }\n\n  public async consume(request: QueueTypes.ConsumeRequest): Promise\u003CQueueTypes.ConsumerHandle> {\n    const source = new EventSource(`${this.fEndpoint}\u002F${request.queue}`);\n\n    \u002F\u002F call request.dispatch() for every job received\n    this.fSources.set(request.queue, source);\n\n    return {\n      queue: request.queue,\n      stop: async () => {\n        this.fSources.delete(request.queue);\n        source.close();\n      },\n    };\n  }\n\n  public async close(): Promise\u003Cvoid> {\n    for (const source of this.fSources.values()) {\n      source.close();\n    }\n\n    this.fSources.clear();\n  }\n}\n",[473,1908,1909,1931,1955,1959,1971,1983,1988,1992,2017,2040,2044,2064,2069,2105,2110,2136,2200,2206,2211,2237,2258,2263,2268,2312,2340,2357,2397,2426,2436,2441,2447,2453,2478,2526,2532,2537,2617,2622,2627,2667,2709,2714,2720,2749,2754,2761,2777,2795,2820,2835,2841,2847,2852,2857,2880,2909,2923,2928,2933,2949,2954],{"__ignoreMap":489},[493,1910,1911,1913,1915,1918,1920,1922,1924,1927,1929],{"class":495,"line":496},[493,1912,872],{"class":678},[493,1914,560],{"class":503},[493,1916,1917],{"class":499}," QueueStrategy",[493,1919,569],{"class":503},[493,1921,882],{"class":678},[493,1923,592],{"class":503},[493,1925,1926],{"class":595},"@vercube\u002Fqueue",[493,1928,599],{"class":503},[493,1930,650],{"class":503},[493,1932,1933,1935,1938,1940,1943,1945,1947,1949,1951,1953],{"class":495,"line":520},[493,1934,872],{"class":678},[493,1936,1937],{"class":678}," type",[493,1939,560],{"class":503},[493,1941,1942],{"class":499}," QueueTypes",[493,1944,569],{"class":503},[493,1946,882],{"class":678},[493,1948,592],{"class":503},[493,1950,1926],{"class":595},[493,1952,599],{"class":503},[493,1954,650],{"class":503},[493,1956,1957],{"class":495,"line":533},[493,1958,896],{"emptyLinePlaceholder":60},[493,1960,1961,1963,1966,1969],{"class":495,"line":578},[493,1962,844],{"class":678},[493,1964,1965],{"class":847}," interface",[493,1967,1968],{"class":851}," HttpStrategyOptions",[493,1970,517],{"class":503},[493,1972,1973,1976,1978,1981],{"class":495,"line":635},[493,1974,1975],{"class":523},"  endpoint",[493,1977,527],{"class":503},[493,1979,1980],{"class":851}," string",[493,1982,650],{"class":503},[493,1984,1985],{"class":495,"line":643},[493,1986,1987],{"class":503},"}\n",[493,1989,1990],{"class":495,"line":1185},[493,1991,896],{"emptyLinePlaceholder":60},[493,1993,1994,1996,1998,2001,2004,2006,2009,2012,2015],{"class":495,"line":1202},[493,1995,844],{"class":678},[493,1997,848],{"class":847},[493,1999,2000],{"class":851}," HttpStrategy",[493,2002,2003],{"class":847}," extends",[493,2005,1917],{"class":851},[493,2007,2008],{"class":503},"\u003C",[493,2010,2011],{"class":851},"HttpStrategyOptions",[493,2013,2014],{"class":503},">",[493,2016,517],{"class":503},[493,2018,2019,2022,2025,2028,2031,2033,2036,2038],{"class":495,"line":1232},[493,2020,2021],{"class":847},"  public",[493,2023,2024],{"class":847}," readonly",[493,2026,2027],{"class":523}," transport",[493,2029,2030],{"class":503}," =",[493,2032,592],{"class":503},[493,2034,2035],{"class":595},"http",[493,2037,599],{"class":503},[493,2039,650],{"class":503},[493,2041,2042],{"class":495,"line":1238},[493,2043,896],{"emptyLinePlaceholder":60},[493,2045,2047,2050,2053,2055,2057,2059,2062],{"class":495,"line":2046},11,[493,2048,2049],{"class":847},"  private",[493,2051,2052],{"class":523}," fEndpoint",[493,2054,527],{"class":503},[493,2056,1980],{"class":851},[493,2058,2030],{"class":503},[493,2060,2061],{"class":503}," ''",[493,2063,650],{"class":503},[493,2065,2067],{"class":495,"line":2066},12,[493,2068,896],{"emptyLinePlaceholder":60},[493,2070,2072,2074,2077,2079,2082,2084,2087,2089,2092,2094,2096,2099,2101,2103],{"class":495,"line":2071},13,[493,2073,2049],{"class":847},[493,2075,2076],{"class":523}," fSources",[493,2078,527],{"class":503},[493,2080,2081],{"class":851}," Map",[493,2083,2008],{"class":503},[493,2085,2086],{"class":851},"string",[493,2088,514],{"class":503},[493,2090,2091],{"class":851}," EventSource",[493,2093,2014],{"class":503},[493,2095,2030],{"class":503},[493,2097,2098],{"class":503}," new",[493,2100,2081],{"class":523},[493,2102,1045],{"class":499},[493,2104,650],{"class":503},[493,2106,2108],{"class":495,"line":2107},14,[493,2109,896],{"emptyLinePlaceholder":60},[493,2111,2113,2115,2118,2121,2124,2127,2129,2131,2134],{"class":495,"line":2112},15,[493,2114,2021],{"class":847},[493,2116,2117],{"class":847}," override",[493,2119,2120],{"class":847}," get",[493,2122,2123],{"class":523}," capabilities",[493,2125,2126],{"class":503},"():",[493,2128,1942],{"class":851},[493,2130,504],{"class":503},[493,2132,2133],{"class":851},"Capabilities",[493,2135,517],{"class":503},[493,2137,2139,2142,2144,2147,2149,2152,2154,2157,2159,2161,2163,2166,2168,2170,2172,2175,2177,2179,2181,2184,2186,2188,2190,2193,2195,2197],{"class":495,"line":2138},16,[493,2140,2141],{"class":678},"    return",[493,2143,560],{"class":503},[493,2145,2146],{"class":523}," retries",[493,2148,527],{"class":503},[493,2150,2151],{"class":1450}," false",[493,2153,514],{"class":503},[493,2155,2156],{"class":523}," delay",[493,2158,527],{"class":503},[493,2160,2151],{"class":1450},[493,2162,514],{"class":503},[493,2164,2165],{"class":523}," priority",[493,2167,527],{"class":503},[493,2169,2151],{"class":1450},[493,2171,514],{"class":503},[493,2173,2174],{"class":523}," progress",[493,2176,527],{"class":503},[493,2178,2151],{"class":1450},[493,2180,514],{"class":503},[493,2182,2183],{"class":523}," stats",[493,2185,527],{"class":503},[493,2187,2151],{"class":1450},[493,2189,514],{"class":503},[493,2191,2192],{"class":523}," peek",[493,2194,527],{"class":503},[493,2196,2151],{"class":1450},[493,2198,2199],{"class":503}," };\n",[493,2201,2203],{"class":495,"line":2202},17,[493,2204,2205],{"class":503},"  }\n",[493,2207,2209],{"class":495,"line":2208},18,[493,2210,896],{"emptyLinePlaceholder":60},[493,2212,2214,2216,2219,2221,2225,2227,2229,2232,2235],{"class":495,"line":2213},19,[493,2215,2021],{"class":847},[493,2217,2218],{"class":523}," initialize",[493,2220,539],{"class":503},[493,2222,2224],{"class":2223},"sHdIc","options",[493,2226,527],{"class":503},[493,2228,1968],{"class":851},[493,2230,2231],{"class":503},"):",[493,2233,2234],{"class":851}," void",[493,2236,517],{"class":503},[493,2238,2240,2243,2246,2248,2251,2253,2256],{"class":495,"line":2239},20,[493,2241,2242],{"class":503},"    this.",[493,2244,2245],{"class":499},"fEndpoint",[493,2247,2030],{"class":503},[493,2249,2250],{"class":499}," options",[493,2252,504],{"class":503},[493,2254,2255],{"class":499},"endpoint",[493,2257,650],{"class":503},[493,2259,2261],{"class":495,"line":2260},21,[493,2262,2205],{"class":503},[493,2264,2266],{"class":495,"line":2265},22,[493,2267,896],{"emptyLinePlaceholder":60},[493,2269,2271,2273,2276,2279,2281,2284,2286,2288,2290,2293,2295,2298,2300,2303,2305,2308,2310],{"class":495,"line":2270},23,[493,2272,2021],{"class":847},[493,2274,2275],{"class":847}," async",[493,2277,2278],{"class":523}," publish",[493,2280,539],{"class":503},[493,2282,2283],{"class":2223},"request",[493,2285,527],{"class":503},[493,2287,1942],{"class":851},[493,2289,504],{"class":503},[493,2291,2292],{"class":851},"PublishRequest",[493,2294,2231],{"class":503},[493,2296,2297],{"class":851}," Promise",[493,2299,2008],{"class":503},[493,2301,2302],{"class":851},"QueueTypes",[493,2304,504],{"class":503},[493,2306,2307],{"class":851},"JobRef",[493,2309,2014],{"class":503},[493,2311,517],{"class":503},[493,2313,2315,2318,2321,2323,2326,2329,2331,2334,2336,2338],{"class":495,"line":2314},24,[493,2316,2317],{"class":847},"    const",[493,2319,2320],{"class":499}," response",[493,2322,2030],{"class":503},[493,2324,2325],{"class":678}," await",[493,2327,2328],{"class":507}," fetch",[493,2330,539],{"class":523},[493,2332,2333],{"class":503},"this.",[493,2335,2245],{"class":499},[493,2337,514],{"class":503},[493,2339,517],{"class":503},[493,2341,2343,2346,2348,2350,2353,2355],{"class":495,"line":2342},25,[493,2344,2345],{"class":523},"      method",[493,2347,527],{"class":503},[493,2349,592],{"class":503},[493,2351,2352],{"class":595},"POST",[493,2354,599],{"class":503},[493,2356,575],{"class":503},[493,2358,2360,2363,2365,2367,2369,2372,2374,2376,2378,2381,2383,2385,2388,2390,2392,2395],{"class":495,"line":2359},26,[493,2361,2362],{"class":523},"      headers",[493,2364,527],{"class":503},[493,2366,560],{"class":503},[493,2368,592],{"class":503},[493,2370,2371],{"class":523},"content-type",[493,2373,599],{"class":503},[493,2375,527],{"class":503},[493,2377,592],{"class":503},[493,2379,2380],{"class":595},"application\u002Fjson",[493,2382,599],{"class":503},[493,2384,514],{"class":503},[493,2386,2387],{"class":503}," ...",[493,2389,2283],{"class":499},[493,2391,504],{"class":503},[493,2393,2394],{"class":499},"headers",[493,2396,1182],{"class":503},[493,2398,2400,2403,2405,2408,2410,2413,2415,2417,2419,2422,2424],{"class":495,"line":2399},27,[493,2401,2402],{"class":523},"      body",[493,2404,527],{"class":503},[493,2406,2407],{"class":499}," JSON",[493,2409,504],{"class":503},[493,2411,2412],{"class":507},"stringify",[493,2414,539],{"class":523},[493,2416,2283],{"class":499},[493,2418,504],{"class":503},[493,2420,2421],{"class":499},"payload",[493,2423,572],{"class":523},[493,2425,575],{"class":503},[493,2427,2429,2432,2434],{"class":495,"line":2428},28,[493,2430,2431],{"class":503},"    }",[493,2433,572],{"class":523},[493,2435,650],{"class":503},[493,2437,2439],{"class":495,"line":2438},29,[493,2440,896],{"emptyLinePlaceholder":60},[493,2442,2444],{"class":495,"line":2443},30,[493,2445,2446],{"class":731},"    \u002F\u002F fetch() resolves for 4xx and 5xx too, and returning a JobRef for one would\n",[493,2448,2450],{"class":495,"line":2449},31,[493,2451,2452],{"class":731},"    \u002F\u002F report a job that was never accepted as published.\n",[493,2454,2456,2459,2462,2465,2468,2470,2473,2476],{"class":495,"line":2455},32,[493,2457,2458],{"class":678},"    if",[493,2460,2461],{"class":523}," (",[493,2463,2464],{"class":503},"!",[493,2466,2467],{"class":499},"response",[493,2469,504],{"class":503},[493,2471,2472],{"class":499},"ok",[493,2474,2475],{"class":523},") ",[493,2477,1128],{"class":503},[493,2479,2481,2484,2486,2489,2491,2494,2497,2500,2502,2504,2507,2509,2512,2514,2516,2519,2522,2524],{"class":495,"line":2480},33,[493,2482,2483],{"class":678},"      throw",[493,2485,2098],{"class":503},[493,2487,2488],{"class":507}," Error",[493,2490,539],{"class":523},[493,2492,2493],{"class":503},"`",[493,2495,2496],{"class":595},"The endpoint refused the job: ",[493,2498,2499],{"class":503},"${",[493,2501,2467],{"class":499},[493,2503,504],{"class":503},[493,2505,2506],{"class":499},"status",[493,2508,566],{"class":503},[493,2510,2511],{"class":503}," ${",[493,2513,2467],{"class":499},[493,2515,504],{"class":503},[493,2517,2518],{"class":499},"statusText",[493,2520,2521],{"class":503},"}`",[493,2523,572],{"class":523},[493,2525,650],{"class":503},[493,2527,2529],{"class":495,"line":2528},34,[493,2530,2531],{"class":503},"    }\n",[493,2533,2535],{"class":495,"line":2534},35,[493,2536,896],{"emptyLinePlaceholder":60},[493,2538,2540,2542,2544,2547,2549,2551,2553,2555,2557,2560,2562,2564,2567,2569,2571,2574,2576,2578,2580,2582,2585,2587,2590,2592,2594,2596,2598,2600,2603,2605,2607,2609,2612,2615],{"class":495,"line":2539},36,[493,2541,2141],{"class":678},[493,2543,560],{"class":503},[493,2545,2546],{"class":523}," id",[493,2548,527],{"class":503},[493,2550,2320],{"class":499},[493,2552,504],{"class":503},[493,2554,2394],{"class":499},[493,2556,504],{"class":503},[493,2558,2559],{"class":507},"get",[493,2561,539],{"class":523},[493,2563,599],{"class":503},[493,2565,2566],{"class":595},"x-id",[493,2568,599],{"class":503},[493,2570,2475],{"class":523},[493,2572,2573],{"class":503},"??",[493,2575,2061],{"class":503},[493,2577,514],{"class":503},[493,2579,682],{"class":523},[493,2581,527],{"class":503},[493,2583,2584],{"class":499}," request",[493,2586,504],{"class":503},[493,2588,2589],{"class":499},"queue",[493,2591,514],{"class":503},[493,2593,707],{"class":523},[493,2595,527],{"class":503},[493,2597,2584],{"class":499},[493,2599,504],{"class":503},[493,2601,2602],{"class":499},"job",[493,2604,514],{"class":503},[493,2606,545],{"class":523},[493,2608,527],{"class":503},[493,2610,2611],{"class":503}," this.",[493,2613,2614],{"class":499},"transport",[493,2616,2199],{"class":503},[493,2618,2620],{"class":495,"line":2619},37,[493,2621,2205],{"class":503},[493,2623,2625],{"class":495,"line":2624},38,[493,2626,896],{"emptyLinePlaceholder":60},[493,2628,2630,2632,2634,2637,2639,2641,2643,2645,2647,2650,2652,2654,2656,2658,2660,2663,2665],{"class":495,"line":2629},39,[493,2631,2021],{"class":847},[493,2633,2275],{"class":847},[493,2635,2636],{"class":523}," consume",[493,2638,539],{"class":503},[493,2640,2283],{"class":2223},[493,2642,527],{"class":503},[493,2644,1942],{"class":851},[493,2646,504],{"class":503},[493,2648,2649],{"class":851},"ConsumeRequest",[493,2651,2231],{"class":503},[493,2653,2297],{"class":851},[493,2655,2008],{"class":503},[493,2657,2302],{"class":851},[493,2659,504],{"class":503},[493,2661,2662],{"class":851},"ConsumerHandle",[493,2664,2014],{"class":503},[493,2666,517],{"class":503},[493,2668,2670,2672,2675,2677,2679,2681,2683,2686,2688,2690,2692,2695,2697,2699,2701,2703,2705,2707],{"class":495,"line":2669},40,[493,2671,2317],{"class":847},[493,2673,2674],{"class":499}," source",[493,2676,2030],{"class":503},[493,2678,2098],{"class":503},[493,2680,2091],{"class":507},[493,2682,539],{"class":523},[493,2684,2685],{"class":503},"`${",[493,2687,2333],{"class":503},[493,2689,2245],{"class":499},[493,2691,566],{"class":503},[493,2693,2694],{"class":595},"\u002F",[493,2696,2499],{"class":503},[493,2698,2283],{"class":499},[493,2700,504],{"class":503},[493,2702,2589],{"class":499},[493,2704,2521],{"class":503},[493,2706,572],{"class":523},[493,2708,650],{"class":503},[493,2710,2712],{"class":495,"line":2711},41,[493,2713,896],{"emptyLinePlaceholder":60},[493,2715,2717],{"class":495,"line":2716},42,[493,2718,2719],{"class":731},"    \u002F\u002F call request.dispatch() for every job received\n",[493,2721,2723,2725,2728,2730,2733,2735,2737,2739,2741,2743,2745,2747],{"class":495,"line":2722},43,[493,2724,2242],{"class":503},[493,2726,2727],{"class":499},"fSources",[493,2729,504],{"class":503},[493,2731,2732],{"class":507},"set",[493,2734,539],{"class":523},[493,2736,2283],{"class":499},[493,2738,504],{"class":503},[493,2740,2589],{"class":499},[493,2742,514],{"class":503},[493,2744,2674],{"class":499},[493,2746,572],{"class":523},[493,2748,650],{"class":503},[493,2750,2752],{"class":495,"line":2751},44,[493,2753,896],{"emptyLinePlaceholder":60},[493,2755,2757,2759],{"class":495,"line":2756},45,[493,2758,2141],{"class":678},[493,2760,517],{"class":503},[493,2762,2764,2767,2769,2771,2773,2775],{"class":495,"line":2763},46,[493,2765,2766],{"class":523},"      queue",[493,2768,527],{"class":503},[493,2770,2584],{"class":499},[493,2772,504],{"class":503},[493,2774,2589],{"class":499},[493,2776,575],{"class":503},[493,2778,2780,2783,2785,2787,2790,2793],{"class":495,"line":2779},47,[493,2781,2782],{"class":507},"      stop",[493,2784,527],{"class":503},[493,2786,2275],{"class":847},[493,2788,2789],{"class":503}," ()",[493,2791,2792],{"class":847}," =>",[493,2794,517],{"class":503},[493,2796,2798,2801,2803,2805,2808,2810,2812,2814,2816,2818],{"class":495,"line":2797},48,[493,2799,2800],{"class":503},"        this.",[493,2802,2727],{"class":499},[493,2804,504],{"class":503},[493,2806,2807],{"class":507},"delete",[493,2809,539],{"class":523},[493,2811,2283],{"class":499},[493,2813,504],{"class":503},[493,2815,2589],{"class":499},[493,2817,572],{"class":523},[493,2819,650],{"class":503},[493,2821,2823,2826,2828,2831,2833],{"class":495,"line":2822},49,[493,2824,2825],{"class":499},"        source",[493,2827,504],{"class":503},[493,2829,2830],{"class":507},"close",[493,2832,1045],{"class":523},[493,2834,650],{"class":503},[493,2836,2838],{"class":495,"line":2837},50,[493,2839,2840],{"class":503},"      },\n",[493,2842,2844],{"class":495,"line":2843},51,[493,2845,2846],{"class":503},"    };\n",[493,2848,2850],{"class":495,"line":2849},52,[493,2851,2205],{"class":503},[493,2853,2855],{"class":495,"line":2854},53,[493,2856,896],{"emptyLinePlaceholder":60},[493,2858,2860,2862,2864,2867,2869,2871,2873,2876,2878],{"class":495,"line":2859},54,[493,2861,2021],{"class":847},[493,2863,2275],{"class":847},[493,2865,2866],{"class":523}," close",[493,2868,2126],{"class":503},[493,2870,2297],{"class":851},[493,2872,2008],{"class":503},[493,2874,2875],{"class":851},"void",[493,2877,2014],{"class":503},[493,2879,517],{"class":503},[493,2881,2883,2886,2888,2890,2892,2895,2897,2899,2901,2904,2907],{"class":495,"line":2882},55,[493,2884,2885],{"class":678},"    for",[493,2887,2461],{"class":523},[493,2889,938],{"class":847},[493,2891,2674],{"class":499},[493,2893,2894],{"class":503}," of",[493,2896,2611],{"class":503},[493,2898,2727],{"class":499},[493,2900,504],{"class":503},[493,2902,2903],{"class":507},"values",[493,2905,2906],{"class":523},"()) ",[493,2908,1128],{"class":503},[493,2910,2912,2915,2917,2919,2921],{"class":495,"line":2911},56,[493,2913,2914],{"class":499},"      source",[493,2916,504],{"class":503},[493,2918,2830],{"class":507},[493,2920,1045],{"class":523},[493,2922,650],{"class":503},[493,2924,2926],{"class":495,"line":2925},57,[493,2927,2531],{"class":503},[493,2929,2931],{"class":495,"line":2930},58,[493,2932,896],{"emptyLinePlaceholder":60},[493,2934,2936,2938,2940,2942,2945,2947],{"class":495,"line":2935},59,[493,2937,2242],{"class":503},[493,2939,2727],{"class":499},[493,2941,504],{"class":503},[493,2943,2944],{"class":507},"clear",[493,2946,1045],{"class":523},[493,2948,650],{"class":503},[493,2950,2952],{"class":495,"line":2951},60,[493,2953,2205],{"class":503},[493,2955,2957],{"class":495,"line":2956},61,[493,2958,1987],{"class":503},[354,2960,2961],{},"Two rules keep a custom strategy consistent with the built-in ones:",[1569,2963,2964,2970],{},[1572,2965,2966,2969],{},[473,2967,2968],{},"dispatch()"," rejecting means the job failed for good. The manager has already run the hooks and applied the retry policy, so put nothing back on the queue: acknowledge it, discard it or dead-letter it.",[1572,2971,2972,2973,2976],{},"A strategy resolved through the container can use ",[473,2974,2975],{},"@Inject",", so a logger or a config service is available like anywhere else.",[2978,2979,2980],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":489,"searchDepth":496,"depth":520,"links":2982},[2983,2984,2985,2986,2987,2988,2989],{"id":360,"depth":520,"text":361},{"id":478,"depth":520,"text":479},{"id":858,"depth":520,"text":859},{"id":1079,"depth":520,"text":1080},{"id":1346,"depth":520,"text":1347},{"id":1613,"depth":520,"text":1614},{"id":1891,"depth":520,"text":1892},"Memory, BullMQ, RabbitMQ and Kafka transports, their options and their limits","md",null,{},{"title":121,"description":2990},"xpZGxOGHU0CQ783JGcwKAcD-84V9B1UiLDpVZbLzMyk",[2997,2999],{"title":117,"path":118,"stem":119,"description":2998,"children":-1},"Decorators, job context, validation and lifecycle hooks",{"title":101,"path":125,"stem":126,"description":3000,"children":-1},"Reference for QueueManager, the queue plugin, decorators, types and errors",1791443501817]