[{"data":1,"prerenderedAt":746},["ShallowReactive",2],{"docs:\u002Fen\u002Fguide\u002Fclient":3},{"page":4,"untranslated":745,"translated":76},{"id":5,"title":6,"body":7,"description":736,"extension":737,"meta":738,"navigation":76,"path":739,"publishedAt":740,"seo":741,"stem":742,"updatedAt":743,"__hash__":744},"docs_en\u002Fen\u002Fguide\u002Fclient.md","Enqueueing from Another Worker",{"type":8,"value":9,"toc":727},"minimark",[10,14,34,39,245,249,262,351,355,367,404,411,415,430,515,522,526,576,580,607,652,656,659,716,723],[11,12,6],"h1",{"id":13},"別workerからの投入",[15,16,17,18,22,23,26,27,30,31,26],"p",{},"To enqueue jobs from a Worker that has no performer, use ",[19,20,21],"code",{},"createClient"," from ",[19,24,25],{},"tsumugi\u002Fclient",".",[28,29],"br",{},"\nIn a Worker that defines performers, enqueue through the return value of ",[19,32,33],{},"defineTsumugi",[35,36,38],"h2",{"id":37},"使い方","Usage",[40,41,46],"pre",{"className":42,"code":43,"language":44,"meta":45,"style":45},"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,47,48,71,78,104,109,121,146,169,181,199,205,220,226],{"__ignoreMap":45},[49,50,53,57,61,64,68],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"szBVR","import",[49,58,60],{"class":59},"sVt8B"," { createClient } ",[49,62,63],{"class":55},"from",[49,65,67],{"class":66},"sZZnC"," 'tsumugi\u002Fclient'",[49,69,70],{"class":59},";\n",[49,72,74],{"class":51,"line":73},2,[49,75,77],{"emptyLinePlaceholder":76},true,"\n",[49,79,81,84,88,91,95,98,101],{"class":51,"line":80},3,[49,82,83],{"class":55},"const",[49,85,87],{"class":86},"sj4cs"," jobs",[49,89,90],{"class":55}," =",[49,92,94],{"class":93},"sScJk"," createClient",[49,96,97],{"class":59},"\u003C",[49,99,100],{"class":93},"Env",[49,102,103],{"class":59},">();\n",[49,105,107],{"class":51,"line":106},4,[49,108,77],{"emptyLinePlaceholder":76},[49,110,112,115,118],{"class":51,"line":111},5,[49,113,114],{"class":55},"export",[49,116,117],{"class":55}," default",[49,119,120],{"class":59}," {\n",[49,122,124,127,130,133,137,140,143],{"class":51,"line":123},6,[49,125,126],{"class":55},"  async",[49,128,129],{"class":93}," fetch",[49,131,132],{"class":59},"(",[49,134,136],{"class":135},"s4XuR","request",[49,138,139],{"class":59},", ",[49,141,142],{"class":135},"env",[49,144,145],{"class":59},") {\n",[49,147,149,152,155,157,160,163,166],{"class":51,"line":148},7,[49,150,151],{"class":55},"    const",[49,153,154],{"class":86}," id",[49,156,90],{"class":55},[49,158,159],{"class":55}," await",[49,161,162],{"class":59}," jobs.",[49,164,165],{"class":93},"enqueue",[49,167,168],{"class":59},"(env, {\n",[49,170,172,175,178],{"class":51,"line":171},8,[49,173,174],{"class":59},"      binding: ",[49,176,177],{"class":66},"'MAIL'",[49,179,180],{"class":59},",\n",[49,182,184,187,190,193,196],{"class":51,"line":183},9,[49,185,186],{"class":59},"      payload: { to: ",[49,188,189],{"class":66},"'a@example.com'",[49,191,192],{"class":59},", subject: ",[49,194,195],{"class":66},"'hi'",[49,197,198],{"class":59}," },\n",[49,200,202],{"class":51,"line":201},10,[49,203,204],{"class":59},"    });\n",[49,206,208,211,214,217],{"class":51,"line":207},11,[49,209,210],{"class":55},"    return",[49,212,213],{"class":59}," Response.",[49,215,216],{"class":93},"json",[49,218,219],{"class":59},"({ id });\n",[49,221,223],{"class":51,"line":222},12,[49,224,225],{"class":59},"  },\n",[49,227,229,232,235,238,240,242],{"class":51,"line":228},13,[49,230,231],{"class":59},"} ",[49,233,234],{"class":55},"satisfies",[49,236,237],{"class":93}," ExportedHandler",[49,239,97],{"class":59},[49,241,100],{"class":93},[49,243,244],{"class":59},">;\n",[35,246,248],{"id":247},"必要なbinding","Required binding",[15,250,251,252,26,255,257,258,261],{},"The only binding you need to configure on the enqueueing Worker is ",[19,253,254],{},"JOB_SHARD",[28,256],{},"\nSet ",[19,259,260],{},"script_name"," to the name of the Worker where Tsumugi is configured.",[40,263,267],{"className":264,"code":265,"language":266,"meta":45,"style":45},"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,268,269,274,282,290,295,308,320,332,337,342,346],{"__ignoreMap":45},[49,270,271],{"class":51,"line":52},[49,272,273],{"class":59},"{\n",[49,275,276,279],{"class":51,"line":73},[49,277,278],{"class":86},"  \"durable_objects\"",[49,280,281],{"class":59},": {\n",[49,283,284,287],{"class":51,"line":80},[49,285,286],{"class":86},"    \"bindings\"",[49,288,289],{"class":59},": [\n",[49,291,292],{"class":51,"line":106},[49,293,294],{"class":59},"      {\n",[49,296,297,300,303,306],{"class":51,"line":111},[49,298,299],{"class":86},"        \"name\"",[49,301,302],{"class":59},": ",[49,304,305],{"class":66},"\"JOB_SHARD\"",[49,307,180],{"class":59},[49,309,310,313,315,318],{"class":51,"line":123},[49,311,312],{"class":86},"        \"class_name\"",[49,314,302],{"class":59},[49,316,317],{"class":66},"\"TsumugiJobShard\"",[49,319,180],{"class":59},[49,321,322,325,327,330],{"class":51,"line":148},[49,323,324],{"class":86},"        \"script_name\"",[49,326,302],{"class":59},[49,328,329],{"class":66},"\"my-jobs\"",[49,331,180],{"class":59},[49,333,334],{"class":51,"line":171},[49,335,336],{"class":59},"      },\n",[49,338,339],{"class":51,"line":183},[49,340,341],{"class":59},"    ],\n",[49,343,344],{"class":51,"line":201},[49,345,225],{"class":59},[49,347,348],{"class":51,"line":207},[49,349,350],{"class":59},"}\n",[35,352,354],{"id":353},"設定の一致","Matching the configuration",[15,356,357,358,361,362,364,365,26],{},"For a binding with ",[19,359,360],{},"shards"," set to 2 or more, pass the same ",[19,363,360],{}," value to ",[19,366,21],{},[40,368,370],{"className":42,"code":369,"language":44,"meta":45,"style":45},"const jobs = createClient\u003CEnv>({\n  MAIL: { shards: 4 },\n});\n",[19,371,372,389,399],{"__ignoreMap":45},[49,373,374,376,378,380,382,384,386],{"class":51,"line":52},[49,375,83],{"class":55},[49,377,87],{"class":86},[49,379,90],{"class":55},[49,381,94],{"class":93},[49,383,97],{"class":59},[49,385,100],{"class":93},[49,387,388],{"class":59},">({\n",[49,390,391,394,397],{"class":51,"line":73},[49,392,393],{"class":59},"  MAIL: { shards: ",[49,395,396],{"class":86},"4",[49,398,198],{"class":59},[49,400,401],{"class":51,"line":80},[49,402,403],{"class":59},"});\n",[15,405,406,407,410],{},"For each binding, set ",[19,408,409],{},"policy"," and the retention period to the same values as in the Worker where Tsumugi is configured.",[35,412,414],{"id":413},"投入時の既定値","Defaults at enqueue time",[15,416,417,418,421,422,424,425,427,428,26],{},"The ",[19,419,420],{},"onEnqueue"," function passed to ",[19,423,33],{}," does not apply to jobs enqueued from another Worker.",[28,426],{},"\nTo use the same defaults for jobs enqueued from another Worker, pass the same function as the third argument of ",[19,429,21],{},[40,431,433],{"className":42,"code":432,"language":44,"meta":45,"style":45},"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":45},[49,436,437,439,441,443,445,447,449],{"class":51,"line":52},[49,438,83],{"class":55},[49,440,87],{"class":86},[49,442,90],{"class":55},[49,444,94],{"class":93},[49,446,97],{"class":59},[49,448,100],{"class":93},[49,450,451],{"class":59},">(\n",[49,453,454],{"class":51,"line":73},[49,455,456],{"class":59},"  {},\n",[49,458,459],{"class":51,"line":80},[49,460,456],{"class":59},[49,462,463,466,468,471,474,477,480,483,486,489,492,495,498,501,504,507],{"class":51,"line":106},[49,464,465],{"class":59},"  { ",[49,467,420],{"class":93},[49,469,470],{"class":59},": (",[49,472,473],{"class":135},"input",[49,475,476],{"class":59},") ",[49,478,479],{"class":55},"=>",[49,481,482],{"class":59}," (input.binding ",[49,484,485],{"class":55},"===",[49,487,488],{"class":66}," 'MAIL'",[49,490,491],{"class":55}," ?",[49,493,494],{"class":59}," { timeoutMs: ",[49,496,497],{"class":86},"120_000",[49,499,500],{"class":59}," } ",[49,502,503],{"class":55},":",[49,505,506],{"class":86}," undefined",[49,508,509],{"class":59},") },\n",[49,511,512],{"class":51,"line":111},[49,513,514],{"class":59},");\n",[15,516,517,518,26],{},"How defaults are resolved is explained in ",[519,520,414],"a",{"href":521},"\u002Fen\u002Fguide\u002Fexecution#%E6%8A%95%E5%85%A5%E6%99%82%E3%81%AE%E6%97%A2%E5%AE%9A%E5%80%A4",[35,523,525],{"id":524},"api","API",[527,528,529,542],"table",{},[530,531,532],"thead",{},[533,534,535,539],"tr",{},[536,537,538],"th",{},"Method",[536,540,541],{},"Description",[543,544,545,556,566],"tbody",{},[533,546,547,553],{},[548,549,550],"td",{},[19,551,552],{},"enqueue(env, input)",[548,554,555],{},"Enqueues one job. Returns the job ID",[533,557,558,563],{},[548,559,560],{},[19,561,562],{},"enqueueMany(env, inputs)",[548,564,565],{},"Enqueues multiple jobs in one call",[533,567,568,573],{},[548,569,570],{},[19,571,572],{},"shardFor(env, binding, partitionKey?)",[548,574,575],{},"Gets the stub of the shard that receives the job",[35,577,579],{"id":578},"型","Types",[15,581,582,584,585,139,588,139,591,139,594,139,597,139,600,603,604,26],{},[19,583,25],{}," provides types such as ",[19,586,587],{},"EnqueueInput",[19,589,590],{},"EnqueueOptions",[19,592,593],{},"EnqueueItem",[19,595,596],{},"JobQueue",[19,598,599],{},"Performers",[19,601,602],{},"BindingConfig",", and ",[19,605,606],{},"TsumugiClient",[15,608,609,610,612,613,615,616,618,619,622,623,626,627,622,630,26,633,635,636,638,639,642,643,26,645,647,648,26],{},"In the ",[19,611,587],{}," that ",[19,614,165],{}," of ",[19,617,21],{}," accepts, ",[19,620,621],{},"binding"," is of type ",[19,624,625],{},"string"," and ",[19,628,629],{},"payload",[19,631,632],{},"unknown",[28,634],{},"\nAs a result, per-binding type checking and required keys do not apply.",[28,637],{},"\nIf you share the performer types, you can write a wrapper that conforms to ",[19,640,641],{},"JobQueue\u003CM>",", which gives you the same type checking as ",[19,644,33],{},[28,646],{},"\nThe differences between the two are summarized in ",[519,649,651],{"href":650},"\u002Fen\u002Fguide\u002Fenqueue#%E6%8A%95%E5%85%A5%E6%96%B9%E6%B3%95","Enqueue methods",[35,653,655],{"id":654},"rest-apiからの投入","Enqueueing from the REST API",[15,657,658],{},"To enqueue jobs without adding a Worker, send a request to the REST API of the Worker where Tsumugi is configured.",[40,660,664],{"className":661,"code":662,"language":663,"meta":45,"style":45},"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,665,666,683,699,708],{"__ignoreMap":45},[49,667,668,671,674,677,680],{"class":51,"line":52},[49,669,670],{"class":93},"curl",[49,672,673],{"class":86}," -X",[49,675,676],{"class":66}," POST",[49,678,679],{"class":66}," https:\u002F\u002Fmy-jobs.example.workers.dev\u002Fapi\u002Fjobs",[49,681,682],{"class":86}," \\\n",[49,684,685,688,691,694,697],{"class":51,"line":73},[49,686,687],{"class":86},"  -H",[49,689,690],{"class":66}," \"Authorization: Bearer ",[49,692,693],{"class":59},"$TSUMUGI_TOKEN",[49,695,696],{"class":66},"\"",[49,698,682],{"class":86},[49,700,701,703,706],{"class":51,"line":80},[49,702,687],{"class":86},[49,704,705],{"class":66}," \"Content-Type: application\u002Fjson\"",[49,707,682],{"class":86},[49,709,710,713],{"class":51,"line":106},[49,711,712],{"class":86},"  -d",[49,714,715],{"class":66}," '{\"binding\":\"MAIL\",\"payload\":{\"to\":\"a@example.com\",\"subject\":\"hi\"}}'\n",[15,717,718,719,26],{},"For the request format, see ",[519,720,722],{"href":721},"\u002Fen\u002Freference\u002Frest-api#post-apijobs","REST API",[724,725,726],"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":45,"searchDepth":80,"depth":80,"links":728},[729,730,731,732,733,734,735],{"id":37,"depth":73,"text":38},{"id":247,"depth":73,"text":248},{"id":353,"depth":73,"text":354},{"id":413,"depth":73,"text":414},{"id":524,"depth":73,"text":525},{"id":578,"depth":73,"text":579},{"id":654,"depth":73,"text":655},"How to enqueue jobs from a Worker that has no performer, using createClient from tsumugi\u002Fclient","md",{},"\u002Fen\u002Fguide\u002Fclient","2026-07-22",{"title":6,"description":736},"en\u002Fguide\u002Fclient","2026-10-25","DR9Ss7rDwkHR3fQwiXVrDaDdOP_H1fxbWZ2uCvAouYY",false,1794027576765]