Quick Start Guide
Get started with Cleo in minutes. Learn how to install, configure, and leverage advanced features like task groups and event handling.
โก Quick Start - Zero to Hero in 5 Minutes!
๐ Installation
# Install Cleo
npm install @cleotasks/core
# Or using yarn
yarn add @cleotasks/core
๐ฏ Basic Configuration
import { Cleo, TaskPriority, GroupProcessingStrategy } from "@cleotasks/core";
// Get Cleo instance
const cleo = Cleo.getInstance();
// Configure Redis connection and worker settings
cleo.configure({
redis: {
host: "localhost",
port: 6379,
password: "cleosecret",
},
worker: {
concurrency: 4,
queues: [
{
name: "notifications",
priority: TaskPriority.HIGH,
},
],
},
});
// Get queue manager for task handling
const queueManager = cleo.getQueueManager();
// Configure group processing strategy
queueManager.setGroupProcessingStrategy(GroupProcessingStrategy.ROUND_ROBIN);
๐จ Creating Tasks with Decorators
import { task, QueueClass } from "@cleotasks/core";
// Individual task with specific configuration
class EmailService {
@task({
id: "send-email",
priority: TaskPriority.HIGH,
queue: 'notifications',
group: 'emails',
timeout: 30000,
maxRetries: 3,
retryDelay: 3000,
})
async sendEmail(input: { email: string, template: string }): Promise<string> {
// Your email sending logic here
return `Sent to ${input.email} using ${input.template}`;
}
}
// Class-level configuration for all methods
@QueueClass({
defaultOptions: {
maxRetries: 3,
retryDelay: 1000,
backoff: {
type: "exponential",
delay: 2000,
},
group: "notifications",
timeout: 300000,
},
queue: "notifications",
})
class NotificationService {
async sendPushNotification(data: { userId: string, message: string }) {
// Push notification logic
return `Push sent to ${data.userId}`;
}
async sendSMS(data: { phone: string, message: string }) {
// SMS logic
return `SMS sent to ${data.phone}`;
}
}
// Create service instances
const emailService = new EmailService();
const notificationService = new NotificationService();
๐ก Event Monitoring
import { ObserverEvent } from "@cleotasks/core";
// Monitor task lifecycle events
queueManager.onTaskEvent(ObserverEvent.TASK_COMPLETED, (taskId, status, data) => {
console.log(`โ
Task ${taskId} completed:`, {
result: data?.result,
group: data?.group
});
});
// Monitor group operations
queueManager.onTaskEvent(ObserverEvent.GROUP_CHANGE, (taskId, status, data) => {
console.log(`๐ฅ Group operation:`, {
taskId,
operation: data.operation,
group: data.group,
history: data.history
});
});
// Monitor task failures with retry information
queueManager.onTaskEvent(ObserverEvent.TASK_FAILED, (taskId, status, data) => {
console.log(`โ Task ${taskId} failed:`, {
error: data?.error,
retryCount: data?.retryCount,
nextRetry: data?.nextRetry
});
});
๐ Running Tasks
// Execute tasks with automatic group handling
await emailService.sendEmail({
email: "user@example.com",
template: "welcome"
});
await notificationService.sendPushNotification({
userId: "user123",
message: "Welcome aboard!"
});
// Get group statistics
const groupStats = await (await queueManager.getGroup("notifications")).getStats();
console.log("๐ Group Stats:", {
total: groupStats.total,
active: groupStats.active,
completed: groupStats.completed,
failed: groupStats.failed
});
// Get task history
const worker = cleo.getWorker("notifications");
const taskHistory = await worker.getTaskHistory();
console.log("๐ Task History:", taskHistory);
๐งน Cleanup
// Clean up event listeners when done
queueManager.offTaskEvent(ObserverEvent.TASK_COMPLETED);
queueManager.offTaskEvent(ObserverEvent.GROUP_CHANGE);
queueManager.offTaskEvent(ObserverEvent.TASK_FAILED);
// Close connections
await cleo.getQueueManager().close();
๐ฏ What's Next?
Check out these guides to dive deeper:
- Core Concepts - Learn about task groups and processing strategies
- Best Practices - Tips for production deployments
- API Reference - Complete API documentation