queue-jobs
Фоновые задачи: типизированные job'ы, worker-паттерн, PostgreSQL
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_URL | PostgreSQL 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 модуль).