performerとenqueueで構成
利用者は、ジョブの処理をperformerとして定義し、投入する箇所でenqueueを呼び出します。ジョブの配送, 実行, 状態の記録は、Tsumugiが処理します。
Cloudflare Queuesをジョブキューとして直接使うといくつかの問題が生じます。
01
02
concurrencyKeyを指定したジョブは、同じキーのものから1件ずつ順に実行されます。03
04
記述するのはジョブの処理の定義と投入のたった2箇所だけです。
1 ジョブの処理をperformerとして定義
import { Performer } from 'tsumugi/performer';export class SendMail extends Performer<{ to: string }, void, {}, Env> { async perform(payload: { to: string }): Promise<void> { await this.env.MAILER.send(payload.to); }}2 ジョブの投入
import { defineTsumugi } from 'tsumugi';import { SendMail } from './performers/send-mail.js';const tsumugi = defineTsumugi({ performers: { SendMail } });const id = await tsumugi.enqueue(env, { binding: 'SendMail', payload: { to: 'a@example.com' } });利用者は、ジョブの処理をperformerとして定義し、投入する箇所でenqueueを呼び出します。ジョブの配送, 実行, 状態の記録は、Tsumugiが処理します。
リトライ, バックオフ, 予約実行, 定期実行, 優先度, 同時実行数とレートの制限, 重複排除, ダッシュボードを、Tsumugiの標準機能として提供します。
ダッシュボードとREST APIは、成功と失敗を含むすべてのジョブについて、状態の一覧表示と検索を提供します。TSUMUGI_METRICSのbindingを設定すると、失敗率と実行時間のメトリクスも記録します。

ノードと依存関係を宣言すると、前段ノードの戻り値が後続ノードのpayloadとして渡されます。fan-outを定義すると、配列の要素ごとに子ノードが作成され、並列に実行されます。
enqueue(env, { binding, payload })を呼び出すと、Tsumugiはジョブを投入します。戻り値はジョブIDであり、呼び出しは即時に完了します。
guaranteeにat-most-onceを指定したジョブは、二重に実行されません。guaranteeの既定値はat-least-onceです。
performerをService Bindingで接続した別のWorkerに配置した場合も、Tsumugiはperformerを実行します。

