UNPKG

fib-flow

Version:

A robust workflow management system for fibjs with task orchestration, state management, and distributed execution capabilities

123 lines (103 loc) 4.99 kB
# Installation Guide fib-flow is a workflow management system built on fibjs, designed for orchestrating complex task dependencies and managing distributed task execution. ## Table of Contents - [Installation](#installation) - [Quick Start](#quick-start) - [Basic Setup](#basic-setup) - [Task Registration](#task-registration) - [Running Tasks](#running-tasks) ## Installation ### Prerequisites - fibjs >= 0.33.0 - One of the following databases: - SQLite3 (included) - MySQL 5.7+ - PostgreSQL 12+ Install fib-flow via fibjs: ```bash fibjs --install fib-flow ``` ## Quick Start ### Basic Setup ```javascript const { TaskManager } = require('fib-flow'); // Initialize task manager with options const taskManager = new TaskManager({ dbConnection: 'sqlite:tasks.db', // Database connection string poll_interval: 1000, // Poll interval in milliseconds max_retries: 3, // Maximum retry attempts retry_interval: 0, // No delay between retries timeout: 60, // Default task timeout in seconds task_heartbeat_interval: 5000, // Running task heartbeat interval in milliseconds task_heartbeat_timeout: 30000, // Running task heartbeat timeout window in milliseconds max_concurrent_tasks: 10, // Maximum concurrent tasks pod_id: 'scheduler-a', // Stable logical node identity for recovery worker_heartbeat_interval: 5000, // Worker registry heartbeat interval in milliseconds worker_heartbeat_timeout: 30000, // Worker liveness timeout window in milliseconds recover_running_jobs: true // Reclaim running jobs from dead workers }); // Initialize database taskManager.db.setup(); ``` Configuration Options: - `dbConnection`: Database connection string (supports SQLite, MySQL, PostgreSQL) - SQLite: `sqlite:tasks.db` or `sqlite::memory:` - MySQL: `mysql://user:pass@host:3306/database` - PostgreSQL: `psql://user:pass@host:5432/database` - `poll_interval`: How often to check for new tasks (in milliseconds) - `max_retries`: Number of total attempts for failed tasks (including initial attempt) - `retry_interval`: Time to wait before retrying (in seconds) - `timeout`: Default task execution timeout (in seconds) - `task_heartbeat_interval`: How often running tasks refresh `last_active_time` (in milliseconds). - `task_heartbeat_timeout`: How long a running task can go without refreshing `last_active_time` before fib-flow marks it as timed out (in milliseconds). - `max_concurrent_tasks`: Maximum number of tasks running simultaneously - `worker_id`: Unique identifier for the current worker instance. If omitted, fib-flow generates one automatically. - `pod_id`: Stable logical node identity used to group multiple worker instances across restarts. - `worker_heartbeat_interval`: How often the current worker updates `fib_flow_workers` liveness metadata (in milliseconds). - `worker_heartbeat_timeout`: Worker liveness timeout window (in milliseconds). - `recover_running_jobs`: Whether startup and peer scans reclaim `running` jobs owned by dead or superseded workers. Worker recovery behavior: - When `pod_id` is configured, fib-flow stores worker liveness in `fib_flow_workers`. - A newer worker from the same `pod_id` supersedes older active workers. - Healthy peers can mark expired workers as dead and reclaim their `running` jobs. - Recovered execution rounds are recorded with attempt outcome `interrupted` and audit event `task_recovered`. ### Task Registration ```javascript // Basic handler registration taskManager.use('sendEmail', async (task) => { const { to, subject, body } = task.payload; await sendEmail(to, subject, body); return { sent: true }; }); // Handler registration with options taskManager.use('processImage', { handler: async (task) => { const { path } = task.payload; await processImage(path); return { processed: true }; }, timeout: 120, // 2 minutes timeout max_retries: 2, // Maximum 2 retries retry_interval: 30, // Retry every 30 seconds priority: 5 // Higher priority task }); ``` Task Handler Options: - `handler`: The function that processes the task - `timeout`: Task-specific timeout in seconds - `max_retries`: Maximum retry attempts for this task type - `retry_interval`: Retry interval in seconds - `priority`: Default priority for this task type Task Handler Parameters: - `task.payload`: Contains the task input data - `task.id`: Unique identifier for the task - `task.status`: Current status of the task - `task.attempts`: Number of execution attempts ### Running Tasks For comprehensive examples, see [Usage Examples](usage-examples.md). Basic startup example: ```javascript taskManager.start(); taskManager.async('simple_task', { data: 'test' }); ``` For error handling and advanced configurations, refer to the [API Reference](api-reference.md), [Database Configuration](database-config.md), and [Workflow Guide](workflow-guide.md).