ObjectStackObjectStack

Worker

Worker protocol schemas

Worker System Protocol

Background task processing system with queues, priorities, and retry logic. Provides a robust foundation for async task execution similar to:

  • Sidekiq (Ruby)
  • Celery (Python)
  • Bull/BullMQ (Node.js)
  • AWS SQS/Lambda

Features:

  • Task queues with priorities
  • Task scheduling and retry logic
  • Batch processing
  • Dead letter queues
  • Task monitoring and logging

@example Basic task

const task: Task = {
  id: 'task-123',
  type: 'send_email',
  payload: { to: 'user@example.com', subject: 'Welcome' },
  queue: 'notifications',
  priority: 5
};

Source: packages/spec/src/system/worker.zod.ts

TypeScript Usage

import { BatchProgressSchema, QueueConfigSchema, TaskSchema, TaskExecutionResultSchema, TaskPriority, TaskRetryPolicySchema, TaskStatus, WorkerStatsSchema } from '@objectstack/spec/system';
import type { BatchProgress, QueueConfig, Task, TaskExecutionResult, TaskPriority, TaskRetryPolicy, TaskStatus, WorkerStats } from '@objectstack/spec/system';

// Validate data
const result = BatchProgressSchema.parse(data);

BatchProgress

Properties

PropertyTypeRequiredDescription
batchIdstringBatch job identifier
totalintegerTotal number of items
processedintegerItems processed
succeededintegerItems succeeded
failedintegerItems failed
percentagenumberProgress percentage
statusEnum<'pending' | 'running' | 'completed' | 'failed' | 'cancelled'>Batch status
startedAtstringoptionalWhen batch started
completedAtstringoptionalWhen batch completed

QueueConfig

Properties

PropertyTypeRequiredDescription
namestringQueue name (snake_case)
concurrencyintegerMax concurrent task executions
rateLimit{ max: integer; duration: integer }optionalRate limit configuration
defaultRetryPolicy{ maxRetries: integer; backoffStrategy: Enum<'fixed' | 'linear' | 'exponential'>; initialDelayMs: integer; maxDelayMs: integer; … }optionalDefault retry policy for tasks
deadLetterQueuestringoptionalDead letter queue name
priorityintegerQueue priority (lower = higher priority)
autoScale{ enabled: boolean; minWorkers: integer; maxWorkers: integer; scaleUpThreshold: integer; … }optionalAuto-scaling configuration

Task

Properties

PropertyTypeRequiredDescription
idstringUnique task identifier
typestringTask type (snake_case)
payloadanyTask payload data
queuestringQueue name
priorityEnum<'critical' | 'high' | 'normal' | 'low' | 'background'>Task priority level
retryPolicy{ maxRetries: integer; backoffStrategy: Enum<'fixed' | 'linear' | 'exponential'>; initialDelayMs: integer; maxDelayMs: integer; … }optionalRetry policy configuration
timeoutMsintegeroptionalTask timeout in milliseconds
scheduledAtstringoptionalISO 8601 datetime to execute task
attemptsintegerNumber of execution attempts
statusEnum<'pending' | 'queued' | 'processing' | 'completed' | 'failed' | 'cancelled' | 'timeout' | 'dead'>Current task status
metadata{ createdAt?: string; updatedAt?: string; createdBy?: string; tags?: string[] }optionalTask metadata

TaskExecutionResult

Properties

PropertyTypeRequiredDescription
taskIdstringTask identifier
statusEnum<'pending' | 'queued' | 'processing' | 'completed' | 'failed' | 'cancelled' | 'timeout' | 'dead'>Execution status
resultanyoptionalExecution result data
error{ message: string; stack?: string; code?: string }optionalError details if failed
durationMsintegeroptionalExecution duration in milliseconds
startedAtstringWhen execution started
completedAtstringoptionalWhen execution completed
attemptintegerAttempt number (1-indexed)
willRetrybooleanWhether task will be retried

TaskPriority

Allowed Values

  • critical
  • high
  • normal
  • low
  • background

TaskRetryPolicy

Properties

PropertyTypeRequiredDescription
maxRetriesintegerMaximum retry attempts
backoffStrategyEnum<'fixed' | 'linear' | 'exponential'>Backoff strategy between retries
initialDelayMsintegerInitial retry delay in milliseconds
maxDelayMsintegerMaximum retry delay in milliseconds
backoffMultipliernumberMultiplier for exponential backoff

TaskStatus

Allowed Values

  • pending
  • queued
  • processing
  • completed
  • failed
  • cancelled
  • timeout
  • dead

WorkerStats

Properties

PropertyTypeRequiredDescription
workerNamestringWorker name
totalProcessedintegerTotal tasks processed
succeededintegerSuccessful tasks
failedintegerFailed tasks
activeintegerCurrently active tasks
avgExecutionMsnumberoptionalAverage execution time in milliseconds
uptimeMsintegerWorker uptime in milliseconds
queuesRecord<string, { pending: integer; active: integer; completed: integer; failed: integer }>optionalPer-queue statistics

On this page