[{"data":1,"prerenderedAt":1581},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-events-scheduler":442,"-hu-events-scheduler-surround":1576},[4,45,60,81,112,129,146,173,197,213,242,280,357,373,385,404,430],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Kezdő lépések","i-lucide-rocket","\u002Fhu\u002Fgetting-started","hu\u002F1.getting-started",[10,15,20,24,29,34,39],{"title":11,"path":12,"stem":13,"icon":14},"Bevezetés","\u002Fhu\u002Fgetting-started\u002Fintroduction","hu\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Laravelből érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-laravel","hu\u002F1.getting-started\u002F2.coming-from-laravel","i-lucide-arrow-right-left",{"title":21,"path":22,"stem":23,"icon":19},"Symfonyból érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-symfony","hu\u002F1.getting-started\u002F3.coming-from-symfony",{"title":25,"path":26,"stem":27,"icon":28},"Telepítés","\u002Fhu\u002Fgetting-started\u002Finstallation","hu\u002F1.getting-started\u002F4.installation","i-lucide-download",{"title":30,"path":31,"stem":32,"icon":33},"Az első modulod","\u002Fhu\u002Fgetting-started\u002Ffirst-module","hu\u002F1.getting-started\u002F5.first-module","i-lucide-package-plus",{"title":35,"path":36,"stem":37,"icon":38},"Projektstruktúra","\u002Fhu\u002Fgetting-started\u002Fproject-structure","hu\u002F1.getting-started\u002F6.project-structure","i-lucide-folder-tree",{"title":40,"path":41,"stem":42,"icon":43},"A shop mintaalkalmazás","\u002Fhu\u002Fgetting-started\u002Fsample-app","hu\u002F1.getting-started\u002F7.sample-app","i-lucide-shopping-cart",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"queue","i-lucide-layers","\u002Fhu\u002Fqueue","hu\u002F10.queue",[51,56],{"title":52,"path":53,"stem":54,"icon":55},"Áttekintés","\u002Fhu\u002Fqueue\u002Foverview","hu\u002F10.queue\u002F1.overview","i-lucide-list-ordered",{"title":57,"path":58,"stem":59,"icon":47},"Taskok","\u002Fhu\u002Fqueue\u002Ftasks","hu\u002F10.queue\u002F2.tasks",{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":44},"events","i-lucide-workflow","\u002Fhu\u002Fevents","hu\u002F11.events",[66,71,76],{"title":67,"path":68,"stem":69,"icon":70},"Események","\u002Fhu\u002Fevents\u002Foverview","hu\u002F11.events\u002F1.overview","i-lucide-radio",{"title":72,"path":73,"stem":74,"icon":75},"Outbox","\u002Fhu\u002Fevents\u002Foutbox","hu\u002F11.events\u002F2.outbox","i-lucide-inbox",{"title":77,"path":78,"stem":79,"icon":80},"Ütemezés","\u002Fhu\u002Fevents\u002Fscheduler","hu\u002F11.events\u002F3.scheduler","i-lucide-calendar-clock",{"title":82,"icon":83,"path":84,"stem":85,"children":86,"page":44},"auth","i-lucide-shield-check","\u002Fhu\u002Fauth","hu\u002F12.auth",[87,92,97,102,107],{"title":88,"path":89,"stem":90,"icon":91},"Autentikáció","\u002Fhu\u002Fauth\u002Foverview","hu\u002F12.auth\u002F1.overview","i-lucide-key-round",{"title":93,"path":94,"stem":95,"icon":96},"RBAC","\u002Fhu\u002Fauth\u002Frbac","hu\u002F12.auth\u002F2.rbac","i-lucide-users",{"title":98,"path":99,"stem":100,"icon":101},"Policy-k","\u002Fhu\u002Fauth\u002Fpolicy","hu\u002F12.auth\u002F3.policy","i-lucide-gavel",{"title":103,"path":104,"stem":105,"icon":106},"Az auth önálló használata","\u002Fhu\u002Fauth\u002Fstandalone","hu\u002F12.auth\u002F4.standalone","i-lucide-plug",{"title":108,"path":109,"stem":110,"icon":111},"Social login goth-tal, önállóan","\u002Fhu\u002Fauth\u002Fsocial-standalone","hu\u002F12.auth\u002F5.social-standalone","i-lucide-log-in",{"title":113,"icon":114,"path":115,"stem":116,"children":117,"page":44},"mail","i-lucide-mail","\u002Fhu\u002Fmail","hu\u002F13.mail",[118,121,125],{"title":52,"path":119,"stem":120,"icon":114},"\u002Fhu\u002Fmail\u002Foverview","hu\u002F13.mail\u002F1.overview",{"title":122,"path":123,"stem":124,"icon":114},"SMTP","\u002Fhu\u002Fmail\u002Fsmtp","hu\u002F13.mail\u002F2.smtp",{"title":126,"path":127,"stem":128,"icon":114},"MJML","\u002Fhu\u002Fmail\u002Fmjml","hu\u002F13.mail\u002F3.mjml",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":44},"notify","i-lucide-bell","\u002Fhu\u002Fnotify","hu\u002F14.notify",[135,138,142],{"title":52,"path":136,"stem":137,"icon":131},"\u002Fhu\u002Fnotify\u002Foverview","hu\u002F14.notify\u002F1.overview",{"title":139,"path":140,"stem":141,"icon":131},"Database csatorna","\u002Fhu\u002Fnotify\u002Fdatabase","hu\u002F14.notify\u002F2.database",{"title":143,"path":144,"stem":145,"icon":131},"Broadcast csatorna","\u002Fhu\u002Fnotify\u002Fbroadcast","hu\u002F14.notify\u002F3.broadcast",{"title":147,"icon":148,"path":149,"stem":150,"children":151,"page":44},"storage","i-lucide-hard-drive","\u002Fhu\u002Fstorage","hu\u002F15.storage",[152,155,159,163,168],{"title":52,"path":153,"stem":154,"icon":148},"\u002Fhu\u002Fstorage\u002Foverview","hu\u002F15.storage\u002F1.overview",{"title":156,"path":157,"stem":158},"Disk API","\u002Fhu\u002Fstorage\u002Fdisk-api","hu\u002F15.storage\u002F2.disk-api",{"title":160,"path":161,"stem":162,"icon":148},"Memória és helyi lemez","\u002Fhu\u002Fstorage\u002Flocal","hu\u002F15.storage\u002F3.local",{"title":164,"path":165,"stem":166,"icon":167},"S3","\u002Fhu\u002Fstorage\u002Fs3","hu\u002F15.storage\u002F4.s3","i-lucide-cloud",{"title":169,"path":170,"stem":171,"icon":172},"Tesztelés","\u002Fhu\u002Fstorage\u002Ftesting","hu\u002F15.storage\u002F5.testing","i-lucide-flask-conical",{"title":174,"icon":175,"path":176,"stem":177,"children":178,"page":44},"telemetry","i-lucide-activity","\u002Fhu\u002Ftelemetry","hu\u002F16.telemetry",[179,182,187,192],{"title":52,"path":180,"stem":181,"icon":175},"\u002Fhu\u002Ftelemetry\u002Foverview","hu\u002F16.telemetry\u002F1.overview",{"title":183,"path":184,"stem":185,"icon":186},"Logolás","\u002Fhu\u002Ftelemetry\u002Flogging","hu\u002F16.telemetry\u002F2.logging","i-lucide-scroll-text",{"title":188,"path":189,"stem":190,"icon":191},"OpenTelemetry","\u002Fhu\u002Ftelemetry\u002Fopentelemetry","hu\u002F16.telemetry\u002F3.opentelemetry","i-lucide-radar",{"title":193,"path":194,"stem":195,"icon":196},"Sentry","\u002Fhu\u002Ftelemetry\u002Fsentry","hu\u002F16.telemetry\u002F4.sentry","i-lucide-bug",{"title":198,"icon":199,"path":200,"stem":201,"children":202,"page":44},"Referencia","i-lucide-book-open","\u002Fhu\u002Freference","hu\u002F17.reference",[203,208],{"title":204,"path":205,"stem":206,"icon":207},"Konfiguráció","\u002Fhu\u002Freference\u002Fconfiguration","hu\u002F17.reference\u002F1.configuration","i-lucide-settings",{"title":209,"path":210,"stem":211,"icon":212},"Külső függőségek","\u002Fhu\u002Freference\u002Fdependencies","hu\u002F17.reference\u002F2.dependencies","i-lucide-package",{"title":214,"icon":215,"path":216,"stem":217,"children":218,"page":44},"Koncepciók","i-lucide-lightbulb","\u002Fhu\u002Fconcepts","hu\u002F2.concepts",[219,223,228,232,237],{"title":220,"path":221,"stem":222,"icon":47},"Architektúra","\u002Fhu\u002Fconcepts\u002Farchitecture","hu\u002F2.concepts\u002F1.architecture",{"title":224,"path":225,"stem":226,"icon":227},"Hibamodell","\u002Fhu\u002Fconcepts\u002Ferror-model","hu\u002F2.concepts\u002F2.error-model","i-lucide-shield-alert",{"title":204,"path":229,"stem":230,"icon":231},"\u002Fhu\u002Fconcepts\u002Fconfiguration","hu\u002F2.concepts\u002F3.configuration","i-lucide-settings-2",{"title":233,"path":234,"stem":235,"icon":236},"Codegen pipeline","\u002Fhu\u002Fconcepts\u002Fcodegen-pipeline","hu\u002F2.concepts\u002F4.codegen-pipeline","i-lucide-file-json",{"title":238,"path":239,"stem":240,"icon":241},"Design patternek","\u002Fhu\u002Fconcepts\u002Fdesign-patterns","hu\u002F2.concepts\u002F5.design-patterns","i-lucide-puzzle",{"title":243,"icon":244,"path":245,"stem":246,"children":247,"page":44},"A kit","i-lucide-box","\u002Fhu\u002Fkit","hu\u002F3.kit",[248,252,257,262,267,271,276],{"title":249,"path":250,"stem":251,"icon":244},"A kit áttekintése","\u002Fhu\u002Fkit\u002Foverview","hu\u002F3.kit\u002F1.overview",{"title":253,"path":254,"stem":255,"icon":256},"Alkalmazás-életciklus","\u002Fhu\u002Fkit\u002Fapp","hu\u002F3.kit\u002F2.app","i-lucide-power",{"title":258,"path":259,"stem":260,"icon":261},"Szerver","\u002Fhu\u002Fkit\u002Fserver","hu\u002F3.kit\u002F3.server","i-lucide-server",{"title":263,"path":264,"stem":265,"icon":266},"Worker","\u002Fhu\u002Fkit\u002Fworker","hu\u002F3.kit\u002F4.worker","i-lucide-cog",{"title":268,"path":269,"stem":270,"icon":70},"Realtime","\u002Fhu\u002Fkit\u002Frealtime","hu\u002F3.kit\u002F5.realtime",{"title":272,"path":273,"stem":274,"icon":275},"Migrációk","\u002Fhu\u002Fkit\u002Fmigrations","hu\u002F3.kit\u002F6.migrations","i-lucide-file-stack",{"title":277,"path":278,"stem":279,"icon":111},"Social login","\u002Fhu\u002Fkit\u002Fsocial-login","hu\u002F3.kit\u002F7.social-login",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":44},"CLI referencia","i-lucide-terminal","\u002Fhu\u002Fcli","hu\u002F4.cli",[286,289,294,299,304,309,314,319,324,329,334,338,343,348,352],{"title":52,"path":287,"stem":288,"icon":282},"\u002Fhu\u002Fcli\u002Foverview","hu\u002F4.cli\u002F1.overview",{"title":290,"path":291,"stem":292,"icon":293},"add db","\u002Fhu\u002Fcli\u002Fadd-db","hu\u002F4.cli\u002F10.add-db","i-lucide-database-zap",{"title":295,"path":296,"stem":297,"icon":298},"add compose \u002F add docker","\u002Fhu\u002Fcli\u002Fadd-compose","hu\u002F4.cli\u002F11.add-compose","i-lucide-container",{"title":300,"path":301,"stem":302,"icon":303},"add mail","\u002Fhu\u002Fcli\u002Fadd-mail","hu\u002F4.cli\u002F12.add-mail","i-lucide-mail-plus",{"title":305,"path":306,"stem":307,"icon":308},"add notification","\u002Fhu\u002Fcli\u002Fadd-notification","hu\u002F4.cli\u002F13.add-notification","i-lucide-bell-plus",{"title":310,"path":311,"stem":312,"icon":313},"add realtime","\u002Fhu\u002Fcli\u002Fadd-realtime","hu\u002F4.cli\u002F14.add-realtime","i-lucide-radio-tower",{"title":315,"path":316,"stem":317,"icon":318},"add seeder","\u002Fhu\u002Fcli\u002Fadd-seeder","hu\u002F4.cli\u002F15.add-seeder","i-lucide-sprout",{"title":320,"path":321,"stem":322,"icon":323},"new project","\u002Fhu\u002Fcli\u002Fnew-project","hu\u002F4.cli\u002F2.new-project","i-lucide-folder-plus",{"title":325,"path":326,"stem":327,"icon":328},"new module","\u002Fhu\u002Fcli\u002Fnew-module","hu\u002F4.cli\u002F3.new-module","i-lucide-blocks",{"title":330,"path":331,"stem":332,"icon":333},"add surface","\u002Fhu\u002Fcli\u002Fadd-surface","hu\u002F4.cli\u002F4.add-surface","i-lucide-layers-2",{"title":335,"path":336,"stem":337,"icon":244},"add core","\u002Fhu\u002Fcli\u002Fadd-core","hu\u002F4.cli\u002F5.add-core",{"title":339,"path":340,"stem":341,"icon":342},"add handler","\u002Fhu\u002Fcli\u002Fadd-handler","hu\u002F4.cli\u002F6.add-handler","i-lucide-webhook",{"title":344,"path":345,"stem":346,"icon":347},"new migration","\u002Fhu\u002Fcli\u002Fnew-migration","hu\u002F4.cli\u002F7.new-migration","i-lucide-file-plus",{"title":349,"path":350,"stem":351,"icon":266},"worker generátorok","\u002Fhu\u002Fcli\u002Fworker-generators","hu\u002F4.cli\u002F8.worker-generators",{"title":353,"path":354,"stem":355,"icon":356},"upgrade templates","\u002Fhu\u002Fcli\u002Fupgrade-templates","hu\u002F4.cli\u002F9.upgrade-templates","i-lucide-refresh-cw",{"title":358,"icon":227,"path":359,"stem":360,"children":361,"page":44},"errs","\u002Fhu\u002Ferrs","hu\u002F5.errs",[362,365,369],{"title":52,"path":363,"stem":364,"icon":227},"\u002Fhu\u002Ferrs\u002Foverview","hu\u002F5.errs\u002F1.overview",{"title":366,"path":367,"stem":368},"API","\u002Fhu\u002Ferrs\u002Fapi","hu\u002F5.errs\u002F2.api",{"title":370,"path":371,"stem":372,"icon":227},"Integráció","\u002Fhu\u002Ferrs\u002Fintegration","hu\u002F5.errs\u002F3.integration",{"title":374,"icon":231,"path":375,"stem":376,"children":377,"page":44},"envconf","\u002Fhu\u002Fenvconf","hu\u002F6.envconf",[378,381],{"title":52,"path":379,"stem":380,"icon":231},"\u002Fhu\u002Fenvconf\u002Foverview","hu\u002F6.envconf\u002F1.overview",{"title":382,"path":383,"stem":384},"Receptek","\u002Fhu\u002Fenvconf\u002Frecipes","hu\u002F6.envconf\u002F2.recipes",{"title":386,"icon":387,"path":388,"stem":389,"children":390,"page":44},"httperr","i-lucide-globe","\u002Fhu\u002Fhttperr","hu\u002F7.httperr",[391,394,399],{"title":52,"path":392,"stem":393,"icon":387},"\u002Fhu\u002Fhttperr\u002Foverview","hu\u002F7.httperr\u002F1.overview",{"title":395,"path":396,"stem":397,"icon":398},"Hibaválaszok","\u002Fhu\u002Fhttperr\u002Ferror-responses","hu\u002F7.httperr\u002F2.error-responses","i-lucide-octagon-alert",{"title":400,"path":401,"stem":402,"icon":403},"Validáció","\u002Fhu\u002Fhttperr\u002Fvalidation","hu\u002F7.httperr\u002F3.validation","i-lucide-badge-check",{"title":405,"icon":406,"path":407,"stem":408,"children":409,"page":44},"dbx","i-lucide-database","\u002Fhu\u002Fdbx","hu\u002F8.dbx",[410,413,417,421,426],{"title":52,"path":411,"stem":412,"icon":406},"\u002Fhu\u002Fdbx\u002Foverview","hu\u002F8.dbx\u002F1.overview",{"title":414,"path":415,"stem":416,"icon":106},"pgx","\u002Fhu\u002Fdbx\u002Fpg","hu\u002F8.dbx\u002F2.pg",{"title":418,"path":419,"stem":420,"icon":47},"bun","\u002Fhu\u002Fdbx\u002Fbunx","hu\u002F8.dbx\u002F3.bunx",{"title":422,"path":423,"stem":424,"icon":425},"Tranzakciók","\u002Fhu\u002Fdbx\u002Ftransactions","hu\u002F8.dbx\u002F4.transactions","i-lucide-git-merge",{"title":427,"path":428,"stem":429,"icon":318},"Seederek","\u002Fhu\u002Fdbx\u002Fseed","hu\u002F8.dbx\u002F5.seed",{"title":431,"icon":55,"path":432,"stem":433,"children":434,"page":44},"paginate","\u002Fhu\u002Fpaginate","hu\u002F9.paginate",[435,438],{"title":52,"path":436,"stem":437,"icon":55},"\u002Fhu\u002Fpaginate\u002Foverview","hu\u002F9.paginate\u002F1.overview",{"title":439,"path":440,"stem":441,"icon":19},"Cursor-lapozás","\u002Fhu\u002Fpaginate\u002Fcursor","hu\u002F9.paginate\u002F2.cursor",{"id":443,"title":77,"body":444,"description":1569,"extension":1570,"links":1571,"meta":1572,"navigation":1573,"path":78,"seo":1574,"stem":79,"__hash__":1575},"docs_hu\u002Fhu\u002F11.events\u002F3.scheduler.md",{"type":445,"value":446,"toc":1559},"minimark",[447,456,485,509,512,533,538,553,730,733,948,955,959,968,1073,1084,1210,1230,1241,1245,1255,1263,1277,1281,1298,1328,1340,1385,1389,1408,1411,1428,1487,1500,1504,1538,1542,1555],[448,449,450,451,455],"p",{},"Importáld a ",[452,453,454],"code",{},"scheduler"," alcsomagot, hogy cron-ütemezéseket és jobokat kódban definiálj:",[457,458,463],"pre",{"className":459,"code":460,"language":461,"meta":462,"style":462},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import \"github.com\u002Fgp-system\u002Fevents\u002Fscheduler\"\n","go","",[452,464,465],{"__ignoreMap":462},[466,467,470,474,478,482],"span",{"class":468,"line":469},"line",1,[466,471,473],{"class":472},"s7zQu","import",[466,475,477],{"class":476},"sMK4o"," \"",[466,479,481],{"class":480},"sBMFI","github.com\u002Fgp-system\u002Fevents\u002Fscheduler",[466,483,484],{"class":476},"\"\n",[448,486,487,488,490,491,495,496,499,500,504,505,508],{},"A ",[452,489,454],{}," lehetővé teszi, hogy az ütemezésed ",[492,493,494],"strong",{},"kódban"," definiáld, ne crontabban: egy ",[452,497,498],{},"Schedule","-t építesz fel fluensen, és a ",[501,502,503],"a",{"href":264},"worker"," futtatja. Az, hogy a replikák közül csak egyen fut, itt ",[492,506,507],{},"alapértelmezett"," viselkedés, nem opt-in: N worker-replika közül Valkey-lease leader-election dönti el, melyik tüzel, külön flag, külön cache-lock nélkül.",[448,510,511],{},"Két dolgot ütemezhetsz:",[513,514,515,527],"ul",{},[516,517,518,521,522,526],"li",{},[492,519,520],{},"eventet",": a tüzelés egy sima ",[501,523,525],{"href":524},"\u002Fhu\u002Fevents\u002Foverview#dispatch","dispatch",", az event szétterül az összes listenerére;",[516,528,529,532],{},[492,530,531],{},"jobot",": egyetlen nevesített handler, fan-out nélkül.",[534,535,537],"h2",{"id":536},"a-schedule-felépítése","A schedule felépítése",[448,539,540,541,544,545,548,549,552],{},"Minden modul generált ",[452,542,543],{},"jobs\u002Fregister.go","-ja ad egy ",[452,546,547],{},"Register(sched, deps)","-t; a worker ezeket egyetlen schedule-be komponálja. A shop éjszakai riportját az ",[452,550,551],{},"add job shop nightlySalesReport --cron \"0 3 * * *\""," generálta:",[457,554,557],{"className":459,"code":555,"filename":556,"language":461,"meta":462,"style":462},"package jobs\n\nimport (\n    \"github.com\u002Facme\u002Fshop\u002Finternal\u002Fmodules\u002Fshop\"\n\n    \"github.com\u002Fgp-system\u002Fgpsystem\u002Fscheduler\"\n    \u002F\u002F gpsystem:job-imports\n)\n\nfunc Register(sched *scheduler.Schedule, deps shop.Dependencies) {\n    sched.Job(\"shop.nightlySalesReport\", \"0 3 * * *\", nightlySalesReport(deps))\n    \u002F\u002F gpsystem:jobs\n}\n","internal\u002Fmodules\u002Fshop\u002Fjobs\u002Fregister.go",[452,558,559,567,574,582,593,598,608,615,621,626,673,718,724],{"__ignoreMap":462},[466,560,561,564],{"class":468,"line":469},[466,562,563],{"class":476},"package",[466,565,566],{"class":480}," jobs\n",[466,568,570],{"class":468,"line":569},2,[466,571,573],{"emptyLinePlaceholder":572},true,"\n",[466,575,577,579],{"class":468,"line":576},3,[466,578,473],{"class":472},[466,580,581],{"class":476}," (\n",[466,583,585,588,591],{"class":468,"line":584},4,[466,586,587],{"class":476},"    \"",[466,589,590],{"class":480},"github.com\u002Facme\u002Fshop\u002Finternal\u002Fmodules\u002Fshop",[466,592,484],{"class":476},[466,594,596],{"class":468,"line":595},5,[466,597,573],{"emptyLinePlaceholder":572},[466,599,601,603,606],{"class":468,"line":600},6,[466,602,587],{"class":476},[466,604,605],{"class":480},"github.com\u002Fgp-system\u002Fgpsystem\u002Fscheduler",[466,607,484],{"class":476},[466,609,611],{"class":468,"line":610},7,[466,612,614],{"class":613},"sHwdD","    \u002F\u002F gpsystem:job-imports\n",[466,616,618],{"class":468,"line":617},8,[466,619,620],{"class":476},")\n",[466,622,624],{"class":468,"line":623},9,[466,625,573],{"emptyLinePlaceholder":572},[466,627,629,632,636,639,643,646,648,651,653,656,659,662,664,667,670],{"class":468,"line":628},10,[466,630,631],{"class":476},"func",[466,633,635],{"class":634},"s2Zo4"," Register",[466,637,638],{"class":476},"(",[466,640,642],{"class":641},"sHdIc","sched",[466,644,645],{"class":476}," *",[466,647,454],{"class":480},[466,649,650],{"class":476},".",[466,652,498],{"class":480},[466,654,655],{"class":476},",",[466,657,658],{"class":641}," deps",[466,660,661],{"class":480}," shop",[466,663,650],{"class":476},[466,665,666],{"class":480},"Dependencies",[466,668,669],{"class":476},")",[466,671,672],{"class":476}," {\n",[466,674,676,680,682,685,687,690,694,696,698,700,703,705,707,710,712,715],{"class":468,"line":675},11,[466,677,679],{"class":678},"sTEyZ","    sched",[466,681,650],{"class":476},[466,683,684],{"class":634},"Job",[466,686,638],{"class":476},[466,688,689],{"class":476},"\"",[466,691,693],{"class":692},"sfazB","shop.nightlySalesReport",[466,695,689],{"class":476},[466,697,655],{"class":476},[466,699,477],{"class":476},[466,701,702],{"class":692},"0 3 * * *",[466,704,689],{"class":476},[466,706,655],{"class":476},[466,708,709],{"class":634}," nightlySalesReport",[466,711,638],{"class":476},[466,713,714],{"class":678},"deps",[466,716,717],{"class":476},"))\n",[466,719,721],{"class":468,"line":720},12,[466,722,723],{"class":613},"    \u002F\u002F gpsystem:jobs\n",[466,725,727],{"class":468,"line":726},13,[466,728,729],{"class":476},"}\n",[448,731,732],{},"A job handler-stubja külön fájlban, a törzs a tiéd:",[457,734,737],{"className":459,"code":735,"filename":736,"language":461,"meta":462,"style":462},"package jobs\n\nimport (\n    \"context\"\n\n    \"github.com\u002Facme\u002Fshop\u002Finternal\u002Fmodules\u002Fshop\"\n)\n\nfunc nightlySalesReport(deps shop.Dependencies) func(context.Context) error {\n    return func(ctx context.Context) error {\n        report, err := buildSalesReport(ctx, deps.DB)\n        if err != nil {\n            return err\n        }\n        return deps.Mailer.Send(ctx, salesReportMessage(report))\n    }\n}\n","internal\u002Fmodules\u002Fshop\u002Fjobs\u002Fnightly_sales_report.go",[452,738,739,745,749,755,764,768,776,780,784,820,843,874,889,897,903,937,943],{"__ignoreMap":462},[466,740,741,743],{"class":468,"line":469},[466,742,563],{"class":476},[466,744,566],{"class":480},[466,746,747],{"class":468,"line":569},[466,748,573],{"emptyLinePlaceholder":572},[466,750,751,753],{"class":468,"line":576},[466,752,473],{"class":472},[466,754,581],{"class":476},[466,756,757,759,762],{"class":468,"line":584},[466,758,587],{"class":476},[466,760,761],{"class":480},"context",[466,763,484],{"class":476},[466,765,766],{"class":468,"line":595},[466,767,573],{"emptyLinePlaceholder":572},[466,769,770,772,774],{"class":468,"line":600},[466,771,587],{"class":476},[466,773,590],{"class":480},[466,775,484],{"class":476},[466,777,778],{"class":468,"line":610},[466,779,620],{"class":476},[466,781,782],{"class":468,"line":617},[466,783,573],{"emptyLinePlaceholder":572},[466,785,786,788,790,792,794,796,798,800,802,805,807,809,812,814,818],{"class":468,"line":623},[466,787,631],{"class":476},[466,789,709],{"class":634},[466,791,638],{"class":476},[466,793,714],{"class":641},[466,795,661],{"class":480},[466,797,650],{"class":476},[466,799,666],{"class":480},[466,801,669],{"class":476},[466,803,804],{"class":476}," func(",[466,806,761],{"class":480},[466,808,650],{"class":476},[466,810,811],{"class":480},"Context",[466,813,669],{"class":476},[466,815,817],{"class":816},"spNyl"," error",[466,819,672],{"class":476},[466,821,822,825,827,830,833,835,837,839,841],{"class":468,"line":628},[466,823,824],{"class":472},"    return",[466,826,804],{"class":476},[466,828,829],{"class":641},"ctx",[466,831,832],{"class":480}," context",[466,834,650],{"class":476},[466,836,811],{"class":480},[466,838,669],{"class":476},[466,840,817],{"class":816},[466,842,672],{"class":476},[466,844,845,848,850,853,856,859,861,863,865,867,869,872],{"class":468,"line":675},[466,846,847],{"class":678},"        report",[466,849,655],{"class":476},[466,851,852],{"class":678}," err ",[466,854,855],{"class":476},":=",[466,857,858],{"class":634}," buildSalesReport",[466,860,638],{"class":476},[466,862,829],{"class":678},[466,864,655],{"class":476},[466,866,658],{"class":678},[466,868,650],{"class":476},[466,870,871],{"class":678},"DB",[466,873,620],{"class":476},[466,875,876,879,881,884,887],{"class":468,"line":720},[466,877,878],{"class":472},"        if",[466,880,852],{"class":678},[466,882,883],{"class":476},"!=",[466,885,886],{"class":476}," nil",[466,888,672],{"class":476},[466,890,891,894],{"class":468,"line":726},[466,892,893],{"class":472},"            return",[466,895,896],{"class":678}," err\n",[466,898,900],{"class":468,"line":899},14,[466,901,902],{"class":476},"        }\n",[466,904,906,909,911,913,916,918,921,923,925,927,930,932,935],{"class":468,"line":905},15,[466,907,908],{"class":472},"        return",[466,910,658],{"class":678},[466,912,650],{"class":476},[466,914,915],{"class":678},"Mailer",[466,917,650],{"class":476},[466,919,920],{"class":634},"Send",[466,922,638],{"class":476},[466,924,829],{"class":678},[466,926,655],{"class":476},[466,928,929],{"class":634}," salesReportMessage",[466,931,638],{"class":476},[466,933,934],{"class":678},"report",[466,936,717],{"class":476},[466,938,940],{"class":468,"line":939},16,[466,941,942],{"class":476},"    }\n",[466,944,946],{"class":468,"line":945},17,[466,947,729],{"class":476},[448,949,950,951,954],{},"A visszaadott hiba retry-t vált ki (az alapértelmezett 25-ös keretig, vagy a bejegyzés saját ",[452,952,953],{},"queue.MaxRetry","-áig), egy átmeneti DB-hiba miatt nem marad el a riport.",[534,956,958],{"id":957},"event-schedule-vagy-job-schedule","Event-schedule vagy job-schedule",[448,960,487,961,963,964,967],{},[452,962,498],{}," fluent API-ja: minden metódus ",[452,965,966],{},"*Schedule","-t ad vissza, láncolható.",[969,970,971,984],"table",{},[972,973,974],"thead",{},[975,976,977,981],"tr",{},[978,979,980],"th",{},"Metódus",[978,982,983],{},"Tüzel",[985,986,987,998,1015,1025,1035,1049,1059],"tbody",{},[975,988,989,995],{},[990,991,992],"td",{},[452,993,994],{},"Cron(spec, ev, opts...)",[990,996,997],{},"cron-kifejezés szerint",[975,999,1000,1005],{},[990,1001,1002],{},[452,1003,1004],{},"Every(d, ev, opts...)",[990,1006,1007,1010,1011,1014],{},[452,1008,1009],{},"d"," időközönként (",[452,1012,1013],{},"@every"," descriptorra fordul)",[975,1016,1017,1022],{},[990,1018,1019],{},[452,1020,1021],{},"EveryMinute(ev, opts...)",[990,1023,1024],{},"minden perc elején",[975,1026,1027,1032],{},[990,1028,1029],{},[452,1030,1031],{},"Hourly(ev, opts...)",[990,1033,1034],{},"minden óra elején",[975,1036,1037,1042],{},[990,1038,1039],{},[452,1040,1041],{},"Daily(ev, opts...)",[990,1043,1044,1045,1048],{},"éjfélkor, a ",[452,1046,1047],{},"SCHEDULER_TIMEZONE"," szerint",[975,1050,1051,1056],{},[990,1052,1053],{},[452,1054,1055],{},"DailyAt(\"HH:MM\", ev, opts...)",[990,1057,1058],{},"naponta a megadott időpontban (24 órás; hibás formátumra setupkor panikol)",[975,1060,1061,1066],{},[990,1062,1063],{},[452,1064,1065],{},"Job(name, spec, fn, opts...)",[990,1067,1068,1069,1072],{},"cron szerint futtatja az ",[452,1070,1071],{},"fn func(context.Context) error","-t",[448,1074,1075,1076,1079,1080,1083],{},"Mikor melyik? ",[492,1077,1078],{},"Event-schedule",", ha a tüzelésre több, egymástól függetlenül retry-zott reakció kell, vagy ha ugyanarra az eseményre futásidejű dispatch is létezik: a listenerek nem tudják és nem is kell tudniuk, hogy cron vagy user-akció dobta el az eventet. ",[492,1081,1082],{},"Job-schedule",", ha egyetlen, nevesített teendőről van szó, mint a shop riportja.",[457,1085,1087],{"className":459,"code":1086,"language":461,"meta":462,"style":462},"\u002F\u002F Event-schedule: minden tüzelés friss eventet dispatchel, ami szétterül\n\u002F\u002F az összes listenerére, pont mint egy futásidejű Dispatch.\nsched.Every(15*time.Minute, shopevents.SyncInventory{})\nsched.DailyAt(\"06:30\", shopevents.DigestDue{})\n\n\u002F\u002F Job-schedule: egy handler, fan-out nélkül; a task-típus \"job:\u003Cnév>\".\nsched.Job(\"shop.nightlySalesReport\", \"0 3 * * *\", nightlySalesReport(deps))\n",[452,1088,1089,1094,1099,1138,1167,1171,1176],{"__ignoreMap":462},[466,1090,1091],{"class":468,"line":469},[466,1092,1093],{"class":613},"\u002F\u002F Event-schedule: minden tüzelés friss eventet dispatchel, ami szétterül\n",[466,1095,1096],{"class":468,"line":569},[466,1097,1098],{"class":613},"\u002F\u002F az összes listenerére, pont mint egy futásidejű Dispatch.\n",[466,1100,1101,1103,1105,1108,1110,1114,1117,1120,1122,1125,1127,1130,1132,1135],{"class":468,"line":576},[466,1102,642],{"class":678},[466,1104,650],{"class":476},[466,1106,1107],{"class":634},"Every",[466,1109,638],{"class":476},[466,1111,1113],{"class":1112},"sbssI","15",[466,1115,1116],{"class":476},"*",[466,1118,1119],{"class":678},"time",[466,1121,650],{"class":476},[466,1123,1124],{"class":678},"Minute",[466,1126,655],{"class":476},[466,1128,1129],{"class":480}," shopevents",[466,1131,650],{"class":476},[466,1133,1134],{"class":480},"SyncInventory",[466,1136,1137],{"class":476},"{})\n",[466,1139,1140,1142,1144,1147,1149,1151,1154,1156,1158,1160,1162,1165],{"class":468,"line":584},[466,1141,642],{"class":678},[466,1143,650],{"class":476},[466,1145,1146],{"class":634},"DailyAt",[466,1148,638],{"class":476},[466,1150,689],{"class":476},[466,1152,1153],{"class":692},"06:30",[466,1155,689],{"class":476},[466,1157,655],{"class":476},[466,1159,1129],{"class":480},[466,1161,650],{"class":476},[466,1163,1164],{"class":480},"DigestDue",[466,1166,1137],{"class":476},[466,1168,1169],{"class":468,"line":595},[466,1170,573],{"emptyLinePlaceholder":572},[466,1172,1173],{"class":468,"line":600},[466,1174,1175],{"class":613},"\u002F\u002F Job-schedule: egy handler, fan-out nélkül; a task-típus \"job:\u003Cnév>\".\n",[466,1177,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208],{"class":468,"line":610},[466,1179,642],{"class":678},[466,1181,650],{"class":476},[466,1183,684],{"class":634},[466,1185,638],{"class":476},[466,1187,689],{"class":476},[466,1189,693],{"class":692},[466,1191,689],{"class":476},[466,1193,655],{"class":476},[466,1195,477],{"class":476},[466,1197,702],{"class":692},[466,1199,689],{"class":476},[466,1201,655],{"class":476},[466,1203,709],{"class":634},[466,1205,638],{"class":476},[466,1207,714],{"class":678},[466,1209,717],{"class":476},[448,1211,1212,1213,1216,1217,1221,1222,1225,1226,1229],{},"Az ",[452,1214,1215],{},"opts..."," a szokásos ",[501,1218,1220],{"href":1219},"\u002Fhu\u002Fqueue\u002Ftasks#enqueue-opci%C3%B3k","enqueue-opciók"," (pl. ",[452,1223,1224],{},"queue.OnQueue(\"reports\")",", ",[452,1227,1228],{},"queue.Timeout(10*time.Minute)","), és a tüzeléskor beadott taskra vonatkoznak.",[448,1231,1232,1233,1236,1237,1240],{},"Egy technikai részlet, ami a garanciákat adja: az ütemezett event tüzelésekor a worker a boríték id-jának a trigger-task id-ját használja. Így ",[492,1234,1235],{},"minden tüzelés új dispatch"," (minden listener újra megkapja), de ",[492,1238,1239],{},"ugyanannak a tüzelésnek a retry-ja idempotens",": nem duplázza a fan-outot.",[534,1242,1244],{"id":1243},"cron-szintaxis","Cron-szintaxis",[448,1246,487,1247,1250,1251,1254],{},[452,1248,1249],{},"spec"," a standard 5 mezős cron (",[452,1252,1253],{},"perc óra hónap-napja hónap hét-napja","), plusz az asynq descriptorai:",[457,1256,1261],{"className":1257,"code":1259,"language":1260},[1258],"language-text","\"0 3 * * *\"     minden nap 03:00-kor\n\"*\u002F10 * * * *\"  10 percenként\n\"0 8 * * 1\"     hétfőnként 08:00-kor\n\"@every 30m\"    30 percenként (nem az óra rácsán, az indulástól számít)\n\"@daily\"        éjfélkor\n","text",[452,1262,1259],{"__ignoreMap":462},[448,1264,1265,1266,1268,1269,1272,1273,1276],{},"A kifejezések a ",[452,1267,1047],{},"-ban értékelődnek ki (IANA név, pl. ",[452,1270,1271],{},"Europe\u002FBudapest","); a default UTC, tehát a shop ",[452,1274,1275],{},"\"0 3 * * *\"","-a UTC 03:00.",[534,1278,1280],{"id":1279},"replika-biztonság-a-leader-election","Replika-biztonság: a leader-election",[448,1282,1283,1284,1287,1288,1293,1294,1297],{},"A schedule-t a ",[452,1285,1286],{},"Runner"," hajtja végre, amit sosem konstruálsz kézzel: a ",[501,1289,1290],{"href":264},[452,1291,1292],{},"worker.Run"," automatikusan elindítja, ha a schedule nem üres. Belül az asynq ",[452,1295,1296],{},"Scheduler","-e dolgozik, egy Valkey-lease védelmében:",[1299,1300,1301,1311,1321],"ol",{},[516,1302,1303,1304,1225,1307,1310],{},"Minden worker-replika megpróbálja megszerezni a lease-kulcsot (",[452,1305,1306],{},"SETNX",[452,1308,1309],{},"SCHEDULER_LEASE_TTL"," lejárattal).",[516,1312,1313,1316,1317,1320],{},[492,1314,1315],{},"Csak a lease birtokosa"," regisztrálja és futtatja a cron-bejegyzéseket; ",[452,1318,1319],{},"LEASE_TTL\u002F3","-onként megújítja a lease-t (Lua compare-and-act, hogy egy lemaradt régi leader ne írhassa felül az újat).",[516,1322,1323,1324,1327],{},"Ha a leader lehal vagy elveszti a lease-t, leáll a tüzelése, és legfeljebb ",[452,1325,1326],{},"LEASE_TTL"," múlva egy másik replika veszi át.",[448,1329,1330,1331,1335,1336,1339],{},"Átvételkor rövid átfedés elképzelhető (a régi leader még kiadott egy ticket, az új is), de ezt a rendszer többi része nyeli el: a kézbesítés amúgy is legalább-egyszeres, a listenerek ",[501,1332,1334],{"href":1333},"\u002Fhu\u002Fevents\u002Foverview#idempotencia","idempotensek",". Ha több alkalmazás (vagy környezet) osztozik egy Valkeyen, a ",[452,1337,1338],{},"SCHEDULER_NAMESPACE","-szel válaszd szét a lease-kulcsaikat, különben egymás leader-választásán osztoznak.",[457,1341,1344],{"className":459,"code":1342,"filename":1343,"language":461,"meta":462,"style":462},"\u002F\u002F az \"egy szerveren fusson\" itt nem opció, hanem az egyetlen működési mód\nsched.Job(\"shop.nightlySalesReport\", \"0 3 * * *\", nightlySalesReport(deps))\n","gpsystem: internal\u002Fmodules\u002Fshop\u002Fjobs\u002Fregister.go",[452,1345,1346,1351],{"__ignoreMap":462},[466,1347,1348],{"class":468,"line":469},[466,1349,1350],{"class":613},"\u002F\u002F az \"egy szerveren fusson\" itt nem opció, hanem az egyetlen működési mód\n",[466,1352,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379,1381,1383],{"class":468,"line":569},[466,1354,642],{"class":678},[466,1356,650],{"class":476},[466,1358,684],{"class":634},[466,1360,638],{"class":476},[466,1362,689],{"class":476},[466,1364,693],{"class":692},[466,1366,689],{"class":476},[466,1368,655],{"class":476},[466,1370,477],{"class":476},[466,1372,702],{"class":692},[466,1374,689],{"class":476},[466,1376,655],{"class":476},[466,1378,709],{"class":634},[466,1380,638],{"class":476},[466,1382,714],{"class":678},[466,1384,717],{"class":476},[534,1386,1388],{"id":1387},"mi-fut-hol","Mi fut hol",[448,1390,1391,1392,1395,1396,1399,1400,1403,1404,1407],{},"Fontos különbség a crontabhoz képest: a tüzelés és a ",[492,1393,1394],{},"végrehajtás"," szétválik. A leader csak enqueue-l: a ",[452,1397,1398],{},"schedule:\u003Cevent>"," vagy ",[452,1401,1402],{},"job:\u003Cnév>"," task a queue-ba kerül, és ",[492,1405,1406],{},"bármelyik"," worker-replika feldolgozhatja, a szokásos konkurencia- és queue-súlyok szerint. Egy nehéz riport tehát nem a \"scheduler gépet\" terheli, hanem a poolt.",[534,1409,204],{"id":1410},"konfiguráció",[448,1412,487,1413,1416,1417,1423,1424,1427],{},[452,1414,1415],{},"scheduler.Config"," a ",[501,1418,1420],{"href":1419},"\u002Fhu\u002Fkit\u002Fworker#konfigur%C3%A1ci%C3%B3",[452,1421,1422],{},"worker.Config","-ba ágyazva érkezik, ",[452,1425,1426],{},"SCHEDULER_"," prefixszel:",[969,1429,1430,1443],{},[972,1431,1432],{},[975,1433,1434,1437,1440],{},[978,1435,1436],{},"Változó",[978,1438,1439],{},"Default",[978,1441,1442],{},"Jelentés",[985,1444,1445,1459,1473],{},[975,1446,1447,1451,1456],{},[990,1448,1449],{},[452,1450,1047],{},[990,1452,1453],{},[452,1454,1455],{},"UTC",[990,1457,1458],{},"IANA időzóna, amelyben a cron-kifejezések kiértékelődnek",[975,1460,1461,1465,1470],{},[990,1462,1463],{},[452,1464,1309],{},[990,1466,1467],{},[452,1468,1469],{},"15s",[990,1471,1472],{},"a leader-lease TTL-je; a leader TTL\u002F3-onként újítja meg",[975,1474,1475,1479,1484],{},[990,1476,1477],{},[452,1478,1338],{},[990,1480,1481],{},[452,1482,1483],{},"gpsystem",[990,1485,1486],{},"a lease-kulcs névtere; állítsd az app nevére, ha többen osztoztok egy Valkeyen",[1488,1489,487,1490,1492,1493,1495,1496,1499],"warning",{},[452,1491,1338],{}," alapértéke szó szerint a ",[452,1494,1483],{}," string, nem a projekted neve. Ez egy generált kit-projekten belül ártalmatlan (minden projektnek saját Valkey-instance-a van), de ha az ",[452,1497,1498],{},"events\u002Fscheduler","-t önállóan használod, és több, egymástól független service-t ugyanarra a Valkeyre mutatsz, mindegyik ugyanazt a lease-kulcsot próbálja megszerezni, hacsak explicit be nem állítod. Állítsd az app nevére.",[534,1501,1503],{"id":1502},"a-kittel","A kittel",[448,1505,487,1506,1509,1510,1512,1513,1515,1516,1519,1520,1522,1523,1525,1526,1533,1534,1537],{},[501,1507,1508],{"href":264},"worker chassis"," az, ami ténylegesen felépíti és futtatja a ",[452,1511,1286],{},"-t: a ",[452,1514,1292],{}," automatikusan elindítja, amint a ",[452,1517,1518],{},"RegisterFunc","-od által felépített ",[452,1521,498],{}," nem üres, és ugyanabban a leállási sorrendben állítja le, mint az asynq szervert és az outbox relay-t. Ebben semmi kit-specifikus nincs: egy önálló fogyasztó felépít egy ",[452,1524,498],{},"-t, megnyit egy ",[501,1527,1529,1532],{"href":1528},"\u002Fhu\u002Fqueue\u002Foverview#konfigur%C3%A1ci%C3%B3",[452,1530,1531],{},"queue.Config","-ot",", és közvetlenül hívja a ",[452,1535,1536],{},"scheduler.NewRunner(ctx, cfg, queueCfg, sched).Run(ctx)","-t.",[534,1539,1541],{"id":1540},"használt-patternek","Használt patternek",[448,1543,1544,1547,1548,1550,1551,650],{},[492,1545,1546],{},"Valkey-lease leader election"," (",[452,1549,1306],{}," szerzéshez, Lua compare-and-renew a megújításhoz): lásd a ",[501,1552,1554],{"href":1553},"\u002Fhu\u002Fconcepts\u002Fdesign-patterns#valkey-lease-leader-election","Design patterneket",[1556,1557,1558],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":462,"searchDepth":569,"depth":569,"links":1560},[1561,1562,1563,1564,1565,1566,1567,1568],{"id":536,"depth":569,"text":537},{"id":957,"depth":569,"text":958},{"id":1243,"depth":569,"text":1244},{"id":1279,"depth":569,"text":1280},{"id":1387,"depth":569,"text":1388},{"id":1410,"depth":569,"text":204},{"id":1502,"depth":569,"text":1503},{"id":1540,"depth":569,"text":1541},"Task scheduling kódban, cron-eventek és jobok, replika-biztosan, Valkey-lease leader-electionnel.","md",null,{},{"icon":80},{"title":77,"description":1569},"b3vv2SLGoQiMGgkgviaid8U2LZkIQ2MigVeqbhdLWXc",[1577,1579],{"title":72,"path":73,"stem":74,"description":1578,"icon":75,"children":-1},"A tranzakciós outbox minta, az üzleti írás és az event atomikusan, kézbesítési garanciával.",{"title":88,"path":89,"stem":90,"description":1580,"icon":91,"children":-1},"JWT-kibocsátás és egy transport-független Identify függvény: stateless auth, framework nélkül.",1785445884797]