[{"data":1,"prerenderedAt":749},["ShallowReactive",2],{"docs:\u002Fko\u002Fguide\u002Fclient":3},{"page":4,"untranslated":748,"translated":77},{"id":5,"title":6,"body":7,"description":739,"extension":740,"meta":741,"navigation":77,"path":742,"publishedAt":743,"seo":744,"stem":745,"updatedAt":746,"__hash__":747},"docs_ko\u002Fko\u002Fguide\u002Fclient.md","다른 Worker에서 enqueue하기",{"type":8,"value":9,"toc":730},"minimark",[10,14,35,40,246,250,263,352,356,368,405,411,415,430,515,523,527,577,581,608,654,658,661,718,726],[11,12,6],"h1",{"id":13},"別workerからの投入",[15,16,17,18,22,23,26,27,30,31,34],"p",{},"performer가 없는 Worker에서 작업을 enqueue하려면 ",[19,20,21],"code",{},"tsumugi\u002Fclient","의 ",[19,24,25],{},"createClient","를 사용하세요.",[28,29],"br",{},"\nperformer를 정의한 Worker에서는 ",[19,32,33],{},"defineTsumugi","의 반환값으로 enqueue합니다.",[36,37,39],"h2",{"id":38},"使い方","사용 방법",[41,42,47],"pre",{"className":43,"code":44,"language":45,"meta":46,"style":46},"language-ts shiki shiki-themes github-light github-dark","import { createClient } from 'tsumugi\u002Fclient';\n\nconst jobs = createClient\u003CEnv>();\n\nexport default {\n  async fetch(request, env) {\n    const id = await jobs.enqueue(env, {\n      binding: 'MAIL',\n      payload: { to: 'a@example.com', subject: 'hi' },\n    });\n    return Response.json({ id });\n  },\n} satisfies ExportedHandler\u003CEnv>;\n","ts","",[19,48,49,72,79,105,110,122,147,170,182,200,206,221,227],{"__ignoreMap":46},[50,51,54,58,62,65,69],"span",{"class":52,"line":53},"line",1,[50,55,57],{"class":56},"szBVR","import",[50,59,61],{"class":60},"sVt8B"," { createClient } ",[50,63,64],{"class":56},"from",[50,66,68],{"class":67},"sZZnC"," 'tsumugi\u002Fclient'",[50,70,71],{"class":60},";\n",[50,73,75],{"class":52,"line":74},2,[50,76,78],{"emptyLinePlaceholder":77},true,"\n",[50,80,82,85,89,92,96,99,102],{"class":52,"line":81},3,[50,83,84],{"class":56},"const",[50,86,88],{"class":87},"sj4cs"," jobs",[50,90,91],{"class":56}," =",[50,93,95],{"class":94},"sScJk"," createClient",[50,97,98],{"class":60},"\u003C",[50,100,101],{"class":94},"Env",[50,103,104],{"class":60},">();\n",[50,106,108],{"class":52,"line":107},4,[50,109,78],{"emptyLinePlaceholder":77},[50,111,113,116,119],{"class":52,"line":112},5,[50,114,115],{"class":56},"export",[50,117,118],{"class":56}," default",[50,120,121],{"class":60}," {\n",[50,123,125,128,131,134,138,141,144],{"class":52,"line":124},6,[50,126,127],{"class":56},"  async",[50,129,130],{"class":94}," fetch",[50,132,133],{"class":60},"(",[50,135,137],{"class":136},"s4XuR","request",[50,139,140],{"class":60},", ",[50,142,143],{"class":136},"env",[50,145,146],{"class":60},") {\n",[50,148,150,153,156,158,161,164,167],{"class":52,"line":149},7,[50,151,152],{"class":56},"    const",[50,154,155],{"class":87}," id",[50,157,91],{"class":56},[50,159,160],{"class":56}," await",[50,162,163],{"class":60}," jobs.",[50,165,166],{"class":94},"enqueue",[50,168,169],{"class":60},"(env, {\n",[50,171,173,176,179],{"class":52,"line":172},8,[50,174,175],{"class":60},"      binding: ",[50,177,178],{"class":67},"'MAIL'",[50,180,181],{"class":60},",\n",[50,183,185,188,191,194,197],{"class":52,"line":184},9,[50,186,187],{"class":60},"      payload: { to: ",[50,189,190],{"class":67},"'a@example.com'",[50,192,193],{"class":60},", subject: ",[50,195,196],{"class":67},"'hi'",[50,198,199],{"class":60}," },\n",[50,201,203],{"class":52,"line":202},10,[50,204,205],{"class":60},"    });\n",[50,207,209,212,215,218],{"class":52,"line":208},11,[50,210,211],{"class":56},"    return",[50,213,214],{"class":60}," Response.",[50,216,217],{"class":94},"json",[50,219,220],{"class":60},"({ id });\n",[50,222,224],{"class":52,"line":223},12,[50,225,226],{"class":60},"  },\n",[50,228,230,233,236,239,241,243],{"class":52,"line":229},13,[50,231,232],{"class":60},"} ",[50,234,235],{"class":56},"satisfies",[50,237,238],{"class":94}," ExportedHandler",[50,240,98],{"class":60},[50,242,101],{"class":94},[50,244,245],{"class":60},">;\n",[36,247,249],{"id":248},"必要なbinding","필요한 binding",[15,251,252,253,256,257,259,262],{},"enqueue하는 Worker에 설정하는 binding은 ",[19,254,255],{},"JOB_SHARD","로 한정됩니다.",[28,258],{},[19,260,261],{},"script_name","에는 Tsumugi를 설정한 Worker의 이름을 지정하세요.",[41,264,268],{"className":265,"code":266,"language":267,"meta":46,"style":46},"language-jsonc shiki shiki-themes github-light github-dark","{\n  \"durable_objects\": {\n    \"bindings\": [\n      {\n        \"name\": \"JOB_SHARD\",\n        \"class_name\": \"TsumugiJobShard\",\n        \"script_name\": \"my-jobs\",\n      },\n    ],\n  },\n}\n","jsonc",[19,269,270,275,283,291,296,309,321,333,338,343,347],{"__ignoreMap":46},[50,271,272],{"class":52,"line":53},[50,273,274],{"class":60},"{\n",[50,276,277,280],{"class":52,"line":74},[50,278,279],{"class":87},"  \"durable_objects\"",[50,281,282],{"class":60},": {\n",[50,284,285,288],{"class":52,"line":81},[50,286,287],{"class":87},"    \"bindings\"",[50,289,290],{"class":60},": [\n",[50,292,293],{"class":52,"line":107},[50,294,295],{"class":60},"      {\n",[50,297,298,301,304,307],{"class":52,"line":112},[50,299,300],{"class":87},"        \"name\"",[50,302,303],{"class":60},": ",[50,305,306],{"class":67},"\"JOB_SHARD\"",[50,308,181],{"class":60},[50,310,311,314,316,319],{"class":52,"line":124},[50,312,313],{"class":87},"        \"class_name\"",[50,315,303],{"class":60},[50,317,318],{"class":67},"\"TsumugiJobShard\"",[50,320,181],{"class":60},[50,322,323,326,328,331],{"class":52,"line":149},[50,324,325],{"class":87},"        \"script_name\"",[50,327,303],{"class":60},[50,329,330],{"class":67},"\"my-jobs\"",[50,332,181],{"class":60},[50,334,335],{"class":52,"line":172},[50,336,337],{"class":60},"      },\n",[50,339,340],{"class":52,"line":184},[50,341,342],{"class":60},"    ],\n",[50,344,345],{"class":52,"line":202},[50,346,226],{"class":60},[50,348,349],{"class":52,"line":208},[50,350,351],{"class":60},"}\n",[36,353,355],{"id":354},"設定の一致","설정 일치",[15,357,358,361,362,364,365,367],{},[19,359,360],{},"shards","를 2 이상으로 설정한 binding에서는 ",[19,363,25],{},"에도 같은 ",[19,366,360],{},"를 지정하세요.",[41,369,371],{"className":43,"code":370,"language":45,"meta":46,"style":46},"const jobs = createClient\u003CEnv>({\n  MAIL: { shards: 4 },\n});\n",[19,372,373,390,400],{"__ignoreMap":46},[50,374,375,377,379,381,383,385,387],{"class":52,"line":53},[50,376,84],{"class":56},[50,378,88],{"class":87},[50,380,91],{"class":56},[50,382,95],{"class":94},[50,384,98],{"class":60},[50,386,101],{"class":94},[50,388,389],{"class":60},">({\n",[50,391,392,395,398],{"class":52,"line":74},[50,393,394],{"class":60},"  MAIL: { shards: ",[50,396,397],{"class":87},"4",[50,399,199],{"class":60},[50,401,402],{"class":52,"line":81},[50,403,404],{"class":60},"});\n",[15,406,407,410],{},[19,408,409],{},"policy","와 보존 기간은 binding별로 Tsumugi를 설정한 Worker와 같은 값을 지정하세요.",[36,412,414],{"id":413},"投入時の既定値","enqueue 시 기본값",[15,416,417,419,420,423,424,426,427,429],{},[19,418,33],{},"에 지정한 ",[19,421,422],{},"onEnqueue","는 다른 Worker에서 하는 enqueue에는 적용되지 않습니다.",[28,425],{},"\n다른 Worker에서 enqueue할 때도 같은 기본값을 사용하려면 ",[19,428,25],{},"의 세 번째 인자에 같은 함수를 지정하세요.",[41,431,433],{"className":43,"code":432,"language":45,"meta":46,"style":46},"const jobs = createClient\u003CEnv>(\n  {},\n  {},\n  { onEnqueue: (input) => (input.binding === 'MAIL' ? { timeoutMs: 120_000 } : undefined) },\n);\n",[19,434,435,452,457,461,510],{"__ignoreMap":46},[50,436,437,439,441,443,445,447,449],{"class":52,"line":53},[50,438,84],{"class":56},[50,440,88],{"class":87},[50,442,91],{"class":56},[50,444,95],{"class":94},[50,446,98],{"class":60},[50,448,101],{"class":94},[50,450,451],{"class":60},">(\n",[50,453,454],{"class":52,"line":74},[50,455,456],{"class":60},"  {},\n",[50,458,459],{"class":52,"line":81},[50,460,456],{"class":60},[50,462,463,466,468,471,474,477,480,483,486,489,492,495,498,501,504,507],{"class":52,"line":107},[50,464,465],{"class":60},"  { ",[50,467,422],{"class":94},[50,469,470],{"class":60},": (",[50,472,473],{"class":136},"input",[50,475,476],{"class":60},") ",[50,478,479],{"class":56},"=>",[50,481,482],{"class":60}," (input.binding ",[50,484,485],{"class":56},"===",[50,487,488],{"class":67}," 'MAIL'",[50,490,491],{"class":56}," ?",[50,493,494],{"class":60}," { timeoutMs: ",[50,496,497],{"class":87},"120_000",[50,499,500],{"class":60}," } ",[50,502,503],{"class":56},":",[50,505,506],{"class":87}," undefined",[50,508,509],{"class":60},") },\n",[50,511,512],{"class":52,"line":112},[50,513,514],{"class":60},");\n",[15,516,517,518,522],{},"기본값이 결정되는 방식은 ",[519,520,414],"a",{"href":521},"\u002Fko\u002Fguide\u002Fexecution#%E6%8A%95%E5%85%A5%E6%99%82%E3%81%AE%E6%97%A2%E5%AE%9A%E5%80%A4","에서 설명합니다.",[36,524,526],{"id":525},"api","API",[528,529,530,543],"table",{},[531,532,533],"thead",{},[534,535,536,540],"tr",{},[537,538,539],"th",{},"메서드",[537,541,542],{},"내용",[544,545,546,557,567],"tbody",{},[534,547,548,554],{},[549,550,551],"td",{},[19,552,553],{},"enqueue(env, input)",[549,555,556],{},"작업 1건을 enqueue합니다. 반환값은 작업 ID입니다",[534,558,559,564],{},[549,560,561],{},[19,562,563],{},"enqueueMany(env, inputs)",[549,565,566],{},"여러 작업을 한 번에 enqueue합니다",[534,568,569,574],{},[549,570,571],{},[19,572,573],{},"shardFor(env, binding, partitionKey?)",[549,575,576],{},"enqueue 대상 shard의 stub을 가져옵니다",[36,578,580],{"id":579},"型","타입",[15,582,583,585,586,140,589,140,592,140,595,140,598,140,601,140,604,607],{},[19,584,21],{},"는 ",[19,587,588],{},"EnqueueInput",[19,590,591],{},"EnqueueOptions",[19,593,594],{},"EnqueueItem",[19,596,597],{},"JobQueue",[19,599,600],{},"Performers",[19,602,603],{},"BindingConfig",[19,605,606],{},"TsumugiClient"," 등의 타입을 제공합니다.",[15,609,610,22,612,614,615,617,618,621,622,625,626,585,629,632,633,635,636,638,639,642,643,645,646,648,649,653],{},[19,611,25],{},[19,613,166],{},"가 받는 ",[19,616,588],{},"에서 ",[19,619,620],{},"binding","은 ",[19,623,624],{},"string"," 타입이고 ",[19,627,628],{},"payload",[19,630,631],{},"unknown"," 타입입니다.",[28,634],{},"\n따라서 binding별 타입 검사와 키 필수화는 적용되지 않습니다.",[28,637],{},"\nperformer의 타입을 공유하고 있다면 ",[19,640,641],{},"JobQueue\u003CM>","에 맞는 래퍼를 작성해 ",[19,644,33],{},"와 같은 타입 검사를 적용할 수 있습니다.",[28,647],{},"\n두 방식의 차이는 ",[519,650,652],{"href":651},"\u002Fko\u002Fguide\u002Fenqueue#%E6%8A%95%E5%85%A5%E6%96%B9%E6%B3%95","enqueue 방법","에 정리되어 있습니다.",[36,655,657],{"id":656},"rest-apiからの投入","REST API로 enqueue하기",[15,659,660],{},"Worker를 추가하지 않고 작업을 enqueue하려면 Tsumugi를 설정한 Worker의 REST API로 요청을 보내세요.",[41,662,666],{"className":663,"code":664,"language":665,"meta":46,"style":46},"language-bash shiki shiki-themes github-light github-dark","curl -X POST https:\u002F\u002Fmy-jobs.example.workers.dev\u002Fapi\u002Fjobs \\\n  -H \"Authorization: Bearer $TSUMUGI_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"binding\":\"MAIL\",\"payload\":{\"to\":\"a@example.com\",\"subject\":\"hi\"}}'\n","bash",[19,667,668,685,701,710],{"__ignoreMap":46},[50,669,670,673,676,679,682],{"class":52,"line":53},[50,671,672],{"class":94},"curl",[50,674,675],{"class":87}," -X",[50,677,678],{"class":67}," POST",[50,680,681],{"class":67}," https:\u002F\u002Fmy-jobs.example.workers.dev\u002Fapi\u002Fjobs",[50,683,684],{"class":87}," \\\n",[50,686,687,690,693,696,699],{"class":52,"line":74},[50,688,689],{"class":87},"  -H",[50,691,692],{"class":67}," \"Authorization: Bearer ",[50,694,695],{"class":60},"$TSUMUGI_TOKEN",[50,697,698],{"class":67},"\"",[50,700,684],{"class":87},[50,702,703,705,708],{"class":52,"line":81},[50,704,689],{"class":87},[50,706,707],{"class":67}," \"Content-Type: application\u002Fjson\"",[50,709,684],{"class":87},[50,711,712,715],{"class":52,"line":107},[50,713,714],{"class":87},"  -d",[50,716,717],{"class":67}," '{\"binding\":\"MAIL\",\"payload\":{\"to\":\"a@example.com\",\"subject\":\"hi\"}}'\n",[15,719,720,721,725],{},"요청 형식은 ",[519,722,724],{"href":723},"\u002Fko\u002Freference\u002Frest-api#post-apijobs","REST API","를 참조하세요.",[727,728,729],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}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);}",{"title":46,"searchDepth":81,"depth":81,"links":731},[732,733,734,735,736,737,738],{"id":38,"depth":74,"text":39},{"id":248,"depth":74,"text":249},{"id":354,"depth":74,"text":355},{"id":413,"depth":74,"text":414},{"id":525,"depth":74,"text":526},{"id":579,"depth":74,"text":580},{"id":656,"depth":74,"text":657},"performer가 없는 Worker에서 tsumugi\u002Fclient의 createClient를 사용해 작업을 enqueue하는 방법","md",{},"\u002Fko\u002Fguide\u002Fclient","2026-07-22",{"title":6,"description":739},"ko\u002Fguide\u002Fclient","2026-10-25","W5i_Uwp1zpFuae4Ms3FjaU4qopI4ChdebtSg9cKjfU4",false,1794027574073]