Skip to content

設定

defineTsumugi

ts
const tsumugi = defineTsumugi<Env>({
  performers,
  bindings,
  auth,
  ui,
  retention,
});
名前必須内容
performersbinding名とperformerの対応。remote()も混ぜられる
bindingsbinding単位の分割数、流量制御、保持期間
auth認証ミドルウェア。未設定ならAPIもUIも生えない
uitsumugi/uiui()。渡さなければバンドルに載らない
retentionD1の読み取りモデルの保持設定

戻り値はfetchqueuescheduledを持つハンドラで、enqueueenqueueManyshardForも生えています

BindingConfig

bindingsの各値です

名前既定内容
shards1分割数。2以上にするとpartitionKeyが必須になる
policy下記流量制御とエージング
sweepAfterMs5分COMPLETEDCANCELLEDをDurable Objectに残す時間
failedRetentionMs7日FAILEDSTALLEDをDurable Objectに残す時間

Policy

名前既定内容
concurrency100同時実行数の上限
perKeyConcurrency1concurrencyKey単位の上限。キーがnullのジョブには適用しない
ratenull{ tokens, intervalMs }のトークンバケット
agingIntervalMs60000この間隔だけ待つごとに実効優先度が1上がる。nullで無効
reaperGraceMs30000timeoutMsの経過後さらにこの時間沈黙したら回収する

EnqueueInput

名前既定内容
binding投入先のbinding名
payloadperformerに渡る値
priority0数値優先度。大きいほど先に出る
maxAttempts3試行回数の上限
backoff指数fixedexponential
timeoutMs60000待つのをやめるまでの時間
delayMs実行開始の遅延
runAt絶対時刻での予約。delayMsとは排他
guaranteeat-least-onceat-least-onceat-most-once
concurrencyKeyキー単位の直列化
uniqueKey重複排除
uniqueForMs24時間uniqueKeyの予約を保持する期間
partitionKey分割時の投入先の決定に使う

backoffの既定値

ts
{ kind: 'exponential', baseMs: 1_000, factor: 2, maxMs: 3_600_000, jitter: true }

wranglerのbinding

名前は固定です

binding種類用途
JOB_SHARDDurable Objectスケジューラ兼調停役
TSUMUGI_DBD1読み取りモデル
TSUMUGI_QUEUEQueuesperformerへの配送
TSUMUGI_METRICSAnalytics Engine時系列メトリクス

投入だけを行うWorkerに要るのはJOB_SHARDだけです

サブパス

import元内容
tsumugidefineTsumugi enqueue bearerAuth TsumugiJobShardなど本体
tsumugi/performerPerformer RemotePerformer
tsumugi/clientcreateClient。Durable Object実装を含まない
tsumugi/uiui()。ダッシュボードのHTML
tsumugi/types型のみ。ランタイムコードを含まない
tsumugi/testingschedule nextAttemptなど純粋関数

公開しているnpmパッケージはtsumugiひとつです performerだけのWorkerがDurable Object実装をバンドルせずに済むよう、サブパスで分けています