設定
defineTsumugi
ts
const tsumugi = defineTsumugi<Env>({
performers,
bindings,
auth,
ui,
retention,
});| 名前 | 必須 | 内容 |
|---|---|---|
performers | ○ | binding名とperformerの対応。remote()も混ぜられる |
bindings | binding単位の分割数、流量制御、保持期間 | |
auth | 認証ミドルウェア。未設定ならAPIもUIも生えない | |
ui | tsumugi/uiのui()。渡さなければバンドルに載らない | |
retention | D1の読み取りモデルの保持設定 |
戻り値はfetchとqueueとscheduledを持つハンドラで、enqueueとenqueueManyとshardForも生えています
BindingConfig
bindingsの各値です
| 名前 | 既定 | 内容 |
|---|---|---|
shards | 1 | 分割数。2以上にするとpartitionKeyが必須になる |
policy | 下記 | 流量制御とエージング |
sweepAfterMs | 5分 | COMPLETEDとCANCELLEDをDurable Objectに残す時間 |
failedRetentionMs | 7日 | FAILEDとSTALLEDをDurable Objectに残す時間 |
Policy
| 名前 | 既定 | 内容 |
|---|---|---|
concurrency | 100 | 同時実行数の上限 |
perKeyConcurrency | 1 | concurrencyKey単位の上限。キーがnullのジョブには適用しない |
rate | null | { tokens, intervalMs }のトークンバケット |
agingIntervalMs | 60000 | この間隔だけ待つごとに実効優先度が1上がる。nullで無効 |
reaperGraceMs | 30000 | timeoutMsの経過後さらにこの時間沈黙したら回収する |
EnqueueInput
| 名前 | 既定 | 内容 |
|---|---|---|
binding | 投入先のbinding名 | |
payload | performerに渡る値 | |
priority | 0 | 数値優先度。大きいほど先に出る |
maxAttempts | 3 | 試行回数の上限 |
backoff | 指数 | fixedかexponential |
timeoutMs | 60000 | 待つのをやめるまでの時間 |
delayMs | 実行開始の遅延 | |
runAt | 絶対時刻での予約。delayMsとは排他 | |
guarantee | at-least-once | at-least-onceかat-most-once |
concurrencyKey | キー単位の直列化 | |
uniqueKey | 重複排除 | |
uniqueForMs | 24時間 | uniqueKeyの予約を保持する期間 |
partitionKey | 分割時の投入先の決定に使う |
backoffの既定値
ts
{ kind: 'exponential', baseMs: 1_000, factor: 2, maxMs: 3_600_000, jitter: true }wranglerのbinding
名前は固定です
| binding | 種類 | 用途 |
|---|---|---|
JOB_SHARD | Durable Object | スケジューラ兼調停役 |
TSUMUGI_DB | D1 | 読み取りモデル |
TSUMUGI_QUEUE | Queues | performerへの配送 |
TSUMUGI_METRICS | Analytics Engine | 時系列メトリクス |
投入だけを行うWorkerに要るのはJOB_SHARDだけです
サブパス
| import元 | 内容 |
|---|---|
tsumugi | defineTsumugi enqueue bearerAuth TsumugiJobShardなど本体 |
tsumugi/performer | Performer RemotePerformer |
tsumugi/client | createClient。Durable Object実装を含まない |
tsumugi/ui | ui()。ダッシュボードのHTML |
tsumugi/types | 型のみ。ランタイムコードを含まない |
tsumugi/testing | schedule nextAttemptなど純粋関数 |
公開しているnpmパッケージはtsumugiひとつです performerだけのWorkerがDurable Object実装をバンドルせずに済むよう、サブパスで分けています