Tsumugi Docs
検索

Tsumugi

A job management system designed for the Cloudflare stack.

何を解決するの

Cloudflare Queuesをジョブキューとして直接使うといくつかの問題が生じます。

  1. 01

    ジョブの状態を管理しづらく、成功したジョブが残らない

    Queues
    Queuesは、投入したメッセージの状態を問い合わせるAPIを提供していません。
    Tsumugi
    TsumugiのダッシュボードとREST APIは、実行中のジョブと終了したジョブの両方について、一覧表示, 検索, 集計を提供します。
  2. 02

    排他制御と重複排除を実装しづらい

    Queues
    Queuesは、メッセージ間の依存関係や関連性を管理しません。
    Tsumugi
    Tsumugiでは、concurrencyKeyを指定したジョブは、同じキーのものから1件ずつ順に実行されます。
  3. 03

    ジョブの種類が増えるほど分岐が増える

    Queues
    Queuesでは、1つのキューに対してconsumerを1つしか設定できません。
    Tsumugi
    Tsumugiは、performerのexport名をbinding名としてジョブの種類を区別するため、consumerに分岐を書く必要がありません。
  4. 04

    まれにメッセージが失われる

    Queues
    Queuesは、処理されずに失われたメッセージを検出する手段を提供していません。
    Tsumugi
    Tsumugiは、実行を開始したジョブから結果が報告されない場合、そのジョブを無応答と判定します。

利用者が記述するコード

記述するのはジョブの処理の定義と投入のたった2箇所だけです。

  1. 1 ジョブの処理をperformerとして定義

    src/performers/send-mail.ts
    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. 2 ジョブの投入

    src/index.ts
    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で構成

利用者は、ジョブの処理を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の別Worker配置

performerをService Bindingで接続した別のWorkerに配置した場合も、Tsumugiはperformerを実行します。

ダッシュボード

ジョブの一覧ページRunのウォーターフォール

Getting Started

  1. $pnpm add tsumugi
  2. $npx tsumugi init