INFO
이 페이지는 LLM으로 번역되었습니다. 세부적인 뉘앙스 등이 원문과 다를 수 있습니다.
다른 Worker에서 enqueue하기
performer가 없는 Worker에서 작업을 enqueue하려면 tsumugi/client의 createClient를 사용하세요.
performer를 정의한 Worker에서는 defineTsumugi의 반환값으로 enqueue합니다.
사용 방법
import { createClient } from 'tsumugi/client';
const jobs = createClient<Env>();
export default {
async fetch(request, env) {
const id = await jobs.enqueue(env, {
binding: 'MAIL',
payload: { to: 'a@example.com', subject: 'hi' },
});
return Response.json({ id });
},
} satisfies ExportedHandler<Env>;
필요한 binding
enqueue하는 Worker에 설정하는 binding은 JOB_SHARD로 한정됩니다.script_name에는 Tsumugi를 설정한 Worker의 이름을 지정하세요.
{
"durable_objects": {
"bindings": [
{
"name": "JOB_SHARD",
"class_name": "TsumugiJobShard",
"script_name": "my-jobs",
},
],
},
}
설정 일치
shards를 2 이상으로 설정한 binding에서는 createClient에도 같은 shards를 지정하세요.
const jobs = createClient<Env>({
MAIL: { shards: 4 },
});
policy와 보존 기간은 binding별로 Tsumugi를 설정한 Worker와 같은 값을 지정하세요.
enqueue 시 기본값
defineTsumugi에 지정한 onEnqueue는 다른 Worker에서 하는 enqueue에는 적용되지 않습니다.
다른 Worker에서 enqueue할 때도 같은 기본값을 사용하려면 createClient의 세 번째 인자에 같은 함수를 지정하세요.
const jobs = createClient<Env>(
{},
{},
{ onEnqueue: (input) => (input.binding === 'MAIL' ? { timeoutMs: 120_000 } : undefined) },
);
기본값이 결정되는 방식은 enqueue 시 기본값에서 설명합니다.
API
| 메서드 | 내용 |
|---|---|
enqueue(env, input) | 작업 1건을 enqueue합니다. 반환값은 작업 ID입니다 |
enqueueMany(env, inputs) | 여러 작업을 한 번에 enqueue합니다 |
shardFor(env, binding, partitionKey?) | enqueue 대상 shard의 stub을 가져옵니다 |
타입
tsumugi/client는 EnqueueInput, EnqueueOptions, EnqueueItem, JobQueue, Performers, BindingConfig, TsumugiClient 등의 타입을 제공합니다.
createClient의 enqueue가 받는 EnqueueInput에서 binding은 string 타입이고 payload는 unknown 타입입니다.
따라서 binding별 타입 검사와 키 필수화는 적용되지 않습니다.
performer의 타입을 공유하고 있다면 JobQueue<M>에 맞는 래퍼를 작성해 defineTsumugi와 같은 타입 검사를 적용할 수 있습니다.
두 방식의 차이는 enqueue 방법에 정리되어 있습니다.
REST API로 enqueue하기
Worker를 추가하지 않고 작업을 enqueue하려면 Tsumugi를 설정한 Worker의 REST API로 요청을 보내세요.
curl -X POST https://my-jobs.example.workers.dev/api/jobs \
-H "Authorization: Bearer $TSUMUGI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"binding":"MAIL","payload":{"to":"a@example.com","subject":"hi"}}'
요청 형식은 REST API를 참조하세요.
게시일: 최종 수정: