queue-jobs

Фоновые задачи: типизированные job'ы, worker-паттерн, PostgreSQL

Code
Source: magicreek
Files: 2
Stack:
pg-bossTypeScriptPostgreSQL

Specification

queue-jobs

Назначение

Фоновые задачи с типизированными job'ами, worker-паттерном и горизонтальным масштабированием. Без Redis — используется PostgreSQL.

Контракты

Queue Manager

// Singleton-паттерн
async function getQueue(): Promise<QueueManager>

// Типизированные job'ы — расширяются под проект
type TranscribeAudioJob = {
  messageId: string;
  mediaPath: string;
  language?: string;
};

type AnalyzeMessagesJob = {
  projectId: string;
  trigger: "manual" | "scheduled" | "auto";
};

Worker Pattern

// workers/index.ts — entrypoint
const boss = await getQueue();
await boss.work("transcribe-audio", transcribeHandler);
await boss.work("analyze-messages", analyzeHandler);

// workers/transcribe.ts — отдельный handler
async function transcribeHandler(job: Job<TranscribeAudioJob>) {
  // обработка
}

Конфигурация

ПеременнаяОписание

|-----------|----------|

DATABASE_URLPostgreSQL connection string (pg-boss использует ту же БД)

Docker

Worker запускается как отдельный контейнер из того же Docker image, но с другим entrypoint:

worker:
  build: { context: ./services/platform, target: worker }
  command: ["npx", "tsx", "src/workers/index.ts"]

Зависимости

pg-boss (PostgreSQL-based, создаёт свои таблицы автоматически)
PostgreSQL 14+

Реализации

СтекПутьИсточникСтатус

|------|------|----------|--------|

pg-boss (TypeScript)implementations/pg-boss/magicreekпроверен

Адаптация

**Job типы** — заменить TranscribeAudioJob/AnalyzeMessagesJob на свои типы.
**Workers** — создать свои handler-функции в workers/.
**Entrypoint** — зарегистрировать свои воркеры в workers/index.ts.
**Docker** — добавить worker-контейнер в docker-compose.yml (см. infra-docker модуль).