队列模式#
您可以根据需求在不同模式下运行n8n。队列模式提供最佳的可扩展性。
二进制数据存储说明: n8n不支持在文件系统中使用二进制数据存储的队列模式。若工作流需在队列模式下持久化二进制数据,可改用S3外部存储。
工作原理#
在队列模式下运行时,您需要部署多个n8n实例:一个主实例负责接收工作流信息(如触发器),多个工作实例负责执行任务。
每个工作器都是独立的Node.js实例,运行于main模式,凭借高IOPS(每秒输入输出操作数)能够同时处理多个工作流执行。
通过使用工作器实例和队列模式,您可以根据工作负载需求灵活扩展n8n:增加工作器实现扩容,移除工作器实现缩容。
执行流程如下:
- 主n8n实例处理定时器和网络钩子调用,生成(但不运行)工作流执行任务
- 将执行ID传递至消息代理Redis,由它维护待执行任务队列并分配至空闲工作器
- 工作器池中的某个实例从Redis获取任务消息
- 工作器使用执行ID从数据库获取工作流信息
- 完成工作流执行后,工作器:
- 将结果写入数据库
- 向Redis发送执行完成通知
- Redis通知主实例

配置工作器#
工作器是实际执行任务的n8n实例。它们从主n8n进程接收待执行工作流信息,执行工作流,并在每次执行完成后更新状态。
设置加密密钥#
n8n在首次启动时会自动生成加密密钥。您也可以通过环境变量设置自定义密钥。
主n8n实例的加密密钥需与所有工作器及网络钩子处理器节点共享,以确保这些工作节点能够访问数据库中存储的凭据。
通过配置文件或设置对应环境变量为每个工作器节点配置加密密钥:
export N8N_ENCRYPTION_KEY=<main_instance_encryption_key>
设置执行模式#
数据库注意事项
n8n 推荐使用 Postgres 13+ 版本。不建议在使用 SQLite 数据库时将 n8n 的执行模式设置为 queue。
请通过以下命令在主实例和所有工作节点上设置环境变量 EXECUTIONS_MODE 为 queue。
export EXECUTIONS_MODE=queue
或者,您可以在配置文件中将 executions.mode 设置为 queue。
启动 Redis#
在独立机器上运行 Redis
您可以在独立机器上运行 Redis,只需确保 n8n 实例能够访问该机器。
要在 Docker 容器中运行 Redis,请遵循以下说明:
运行以下命令启动 Redis 实例:
docker run --name some-redis -p 6379:6379 -d redis
默认情况下,Redis 在 localhost 的 6379 端口运行且无需密码。根据您的 Redis 配置,请为主 n8n 进程设置以下配置。这些配置将允许 n8n 与 Redis 进行交互。
| 使用配置文件 | 使用环境变量 | 说明 |
|---|---|---|
queue.bull.redis.host:localhost | QUEUE_BULL_REDIS_HOST=localhost | 默认情况下,Redis 在 localhost 上运行。 |
queue.bull.redis.port:6379 | QUEUE_BULL_REDIS_PORT=6379 | 默认端口为 6379。如果 Redis 运行在其他端口,请配置此值。 |
您还可以设置以下可选配置:
| 使用配置文件 | 使用环境变量 | 说明 |
|---|---|---|
queue.bull.redis.username:USERNAME | QUEUE_BULL_REDIS_USERNAME | 默认情况下,Redis 不需要用户名。如果使用特定用户,请配置此变量。 |
queue.bull.redis.password:PASSWORD | QUEUE_BULL_REDIS_PASSWORD | 默认情况下,Redis 不需要密码。如果使用密码,请配置此变量。 |
queue.bull.redis.db:0 | QUEUE_BULL_REDIS_DB | 默认值为 0。如果更改此值,请更新配置。 |
queue.bull.redis.timeoutThreshold:10000ms | QUEUE_BULL_REDIS_TIMEOUT_THRESHOLD | 设置 n8n 在 Redis 不可用时应等待多久再退出。默认值为 10000 毫秒。 |
queue.bull.gracefulShutdownTimeout:30 | N8N_GRACEFUL_SHUTDOWN_TIMEOUT | 工作进程在终止前完成执行任务的优雅关闭超时时间。默认值为 30 秒。 |
现在您可以启动 n8n 实例,它将连接到您的 Redis 实例。
启动工作进程#
您需要启动工作进程以允许 n8n 执行工作流。如果希望将工作进程托管在单独的机器上,请在该机器上安装 n8n,并确保其连接到您的 Redis 实例和 n8n 数据库。
通过从根目录运行以下命令来启动工作进程:
./packages/cli/bin/n8n worker
如果您正在使用 Docker,请使用以下命令:
docker run --name n8n-queue -p 5679:5678 docker.n8n.io/n8nio/n8n worker
您可以设置多个工作进程。请确保所有工作进程都能访问 Redis 和 n8n 数据库。
工作服务器#
每个工作进程会运行一个服务器,并暴露以下可选端点:
/healthz:在启用QUEUE_HEALTH_CHECK_ACTIVE环境变量时,返回工作进程是否正常运行/healthz/readiness:在启用QUEUE_HEALTH_CHECK_ACTIVE环境变量时,返回工作进程的数据库和 Redis 连接是否就绪- 凭据覆盖端点
/metrics