Package Exports
- @mbc-cqrs-serverless/task
- @mbc-cqrs-serverless/task/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@mbc-cqrs-serverless/task) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
MBC CQRS serverless framework Task package
Description
The Task package provides comprehensive task management functionality in the MBC CQRS Serverless framework. It enables:
- Asynchronous task execution
- Task status tracking
- Progress monitoring
- Error handling and retries
- Task queue management
- Task history and logging
Installation
npm install @mbc-cqrs-serverless/task
Usage
Basic Setup
- Import and configure the task module:
import { TaskModule } from '@mbc-cqrs-serverless/task';
import { Module } from '@nestjs/common';
@Module({
imports: [
TaskModule.forRoot({
queueUrl: process.env.TASK_QUEUE_URL,
region: 'ap-northeast-1',
}),
],
})
export class AppModule {}
Creating Tasks
- Define a task:
import { Task, TaskMetadata } from '@mbc-cqrs-serverless/task';
@Task({
name: 'ProcessOrder',
maxRetries: 3,
timeout: 300, // 5 minutes
})
export class ProcessOrderTask {
async execute(
data: any,
metadata: TaskMetadata
): Promise<void> {
// Task implementation
}
}
- Schedule a task:
import { TaskService } from '@mbc-cqrs-serverless/task';
@Injectable()
export class OrderService {
constructor(
private readonly taskService: TaskService
) {}
async processOrder(orderId: string): Promise<void> {
await this.taskService.schedule('ProcessOrder', {
orderId,
items: [],
// ... other data
});
}
}
Task Status Tracking
- Monitor task status:
@Injectable()
export class TaskMonitor {
constructor(
private readonly taskService: TaskService
) {}
async checkTaskStatus(taskId: string): Promise<TaskStatus> {
const task = await this.taskService.getTask(taskId);
return task.status;
}
async getTaskProgress(taskId: string): Promise<number> {
const task = await this.taskService.getTask(taskId);
return task.progress || 0;
}
}
Progress Updates
- Update task progress:
@Task({
name: 'BatchProcess',
})
export class BatchProcessTask {
async execute(
data: any,
metadata: TaskMetadata
): Promise<void> {
const total = data.items.length;
for (let i = 0; i < total; i++) {
await this.processItem(data.items[i]);
await metadata.updateProgress((i + 1) / total * 100);
}
}
}
Error Handling and Retries
- Configure retry behavior:
@Task({
name: 'SendEmail',
maxRetries: 3,
retryDelay: 60, // 1 minute
retryStrategy: 'exponential',
})
export class SendEmailTask {
async execute(
data: any,
metadata: TaskMetadata
): Promise<void> {
try {
await this.emailService.send(data);
} catch (error) {
if (error.retryable) {
throw new RetryableError(error.message);
}
throw error;
}
}
}
Queue Management
- Work with multiple queues:
@Injectable()
export class WorkflowService {
constructor(
private readonly taskService: TaskService
) {}
async scheduleWorkflow(): Promise<void> {
// High priority queue
await this.taskService.schedule('CriticalTask', data, {
queueUrl: process.env.HIGH_PRIORITY_QUEUE_URL,
});
// Default queue
await this.taskService.schedule('NormalTask', data);
}
}
Task History and Logging
- Access task history:
@Injectable()
export class AuditService {
constructor(
private readonly taskService: TaskService
) {}
async getTaskHistory(taskId: string): Promise<TaskHistory[]> {
const history = await this.taskService.getTaskHistory(taskId);
return history;
}
async getTaskLogs(taskId: string): Promise<TaskLog[]> {
const logs = await this.taskService.getTaskLogs(taskId);
return logs;
}
}
Documentation
Visit https://mbc-cqrs-serverless.mbc-net.com/ to view the full documentation, including:
- Task configuration
- Queue management
- Error handling strategies
- Monitoring and logging
- API reference
License
Copyright © 2024, Murakami Business Consulting, Inc. https://www.mbc-net.com/
This project and sub projects are under the MIT License.