资源描述
celery.node 是一个轻量、高性能的 Node.js 客户端与工作器实现,完全兼容 Python Celery 的协议(AMQP/RabbitMQ、Redis 等 broker),支持任务发布、消费、重试、定时调度与结果获取。适用于需在 Node.js 环境中与现有 Celery 后端协同的微服务、事件驱动架构及异步任务集成场景,显著降低跨语言任务编排复杂度。
详细内容
## 框架简介与定位
celery.node 是专为 Node.js 设计的 Celery 兼容客户端与工作器库,遵循 Celery v4/v5 协议规范(基于 AMQP/Redis broker),不依赖 Python 运行时,可独立作为任务生产者(Producer)或消费者(Worker)接入已有 Celery 生态。其核心目标是填补 Node.js 在成熟任务队列体系中的协议级互操作空白,实现与 Python Celery 服务的无缝协同。
## 核心特性
- **全协议兼容**:支持 Celery 的 `amqp` 和 `redis` broker 后端,兼容 `json`/`msgpack` 序列化格式及 `default`/`uuid` 任务 ID 生成策略。
- **双角色支持**:既可作为任务发布者(`sendTask`)调用远程 Celery 任务,也可作为工作器(`worker`)注册并执行本地定义的异步函数。
- **完整任务生命周期管理**:内置重试(exponential backoff)、超时控制、任务撤销(`revoke`)、失败回调(`onFailure`)及结果获取(`getTaskResult`)能力。
- **定时与周期任务支持**:通过 `beat` 模式对接 Celery Beat 调度器,或使用内置 `schedule` API 声明 `crontab`/`interval` 类型的周期任务。
- **生产就绪增强**:提供连接自动重连、broker 连接池、任务并发控制(`concurrency` 配置)、结构化日志输出及 Prometheus 指标埋点扩展接口。
## 适用场景
- Node.js 微服务需调用 Python 主导的 Celery 任务(如图像处理、邮件发送、数据同步)。
- 构建混合技术栈的异步作业平台,统一使用 Celery broker(如 RabbitMQ)进行任务分发。
- 替代轻量级任务方案(如 BullMQ)以复用企业已有的 Celery 监控、告警与运维体系。
- 需要跨语言任务追踪与链路透传(配合 OpenTracing)的分布式系统。
## 快速入门步骤
1. **安装**:
```bash
npm install celery-node
```
2. **最小示例(作为任务生产者)**:
```js
const { Celery } = require('celery-node');
const celery = new Celery({
broker: 'redis://localhost:6379',
backend: 'redis://localhost:6379'
});
// 调用远程 Celery 任务
const result = await celery.sendTask('tasks.add', [4, 5]);
console.log(await result.get()); // → 9
```
3. **启动本地 Worker(执行 `tasks.add`)**:
```js
celery.worker({
tasks: {
'tasks.add': async ([a, b]) => a + b
}
}).start();
```
## 生态与社区说明
celery.node 由开源社区持续维护,GitHub 仓库提供完整 API 文档、测试用例与 Docker 示例。虽非官方 Celery 项目,但严格遵循 Celery 协议 RFC,并与主流 broker(RabbitMQ 3.8+、Redis 6+)及 Celery 4.4+/5.x 版本保持兼容性验证。社区活跃于 GitHub Issues 与 Discord,常见问题与最佳实践持续沉淀于 Wiki。建议搭配 `celery[redis]` 或 `celery[rabbitmq]` Python 端使用以确保协议一致性。