Skip to content

任务运行者

任务运行器是一种以安全高效的方式执行任务的通用机制。它们用于在代码节点中执行用户提供的 JavaScript 代码。

本文档介绍了任务运行器的工作原理以及如何配置它们。

工作原理

任务运行器功能由三个组件组成:任务运行器、任务代理和任务请求器。

任务运行器概述

任务运行器使用 WebSocket 连接连接到任务代理。任务请求者向代理提交任务请求,代理会接收并执行该请求。

运行器执行任务并将结果提交给任务请求者。任务代理负责协调运行器和请求者之间的沟通。

n8n 实例(主实例和工作实例)充当代理。本例中的 Code 节点是任务请求者。

任务运行器模式

您可以以两种不同的模式使用任务运行器:内部和外部。

内部模式

在内部模式下,n8n 实例会将任务运行器作为子进程启动。n8n 进程负责监控和管理任务运行器的生命周期。任务运行器进程与 n8n共享相同的和。

外部模式

在外部模式下,外部编排器(例如 Kubernetes)会启动任务运行器,而不是 n8n。通常,这意味着您需要将任务运行器配置为作为 n8n 旁边的 Sidecar 容器运行。

作为侧边容器部署的任务运行器

在此模式下,编排器监控并管理任务运行器容器的生命周期。任务运行器与 n8n 实例完全隔离。

当使用队列模式时,每个 n8n 容器(主容器和工作容器)都需要有自己的任务运行器。

设置外部模式

使用以下详细信息在外部模式下配置任务运行器

以外部模式配置 n8n 实例

您可以通过设置以下环境变量来配置 n8n 以使用外部任务运行器:

环境变量 描述
N8N_RUNNERS_ENABLED=true 启用任务运行器。
N8N_RUNNERS_MODE=external 在外部模式下使用任务运行器。
N8N_RUNNERS_AUTH_TOKEN=<random secure shared secret> 运行者使用共享秘密任务来连接代理。
N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0 默认情况下,任务代理仅监听 localhost。当使用多个容器(例如,使用 Docker Compose)时,它需要能够接受外部连接。

有关环境变量的完整列表,请参阅任务运行器环境变量

在外部模式下配置任务运行器

任务运行器已捆绑在 n8n Docker 镜像中。Docker 镜像还包含任务运行器启动器。

启动器可以按需启动运行器,这意味着在无需执行任何工作时内存占用较低,但冷启动时会有短暂的延迟(几百毫秒)。启动器还会监控运行器,并在出现无限循环或其他问题时重新启动它。

通过设置以下属性从 n8n Docker 镜像运行任务运行器容器:

配置 描述
command ["/usr/local/bin/task-runner-launcher", "javascript"]
livenessProbe , 港口

为容器设置以下环境变量,并根据您的需要进行调整:

环境变量 描述
N8N_RUNNERS_AUTH_TOKEN=<random secure shared secret> 任务运行器用于连接代理的共享密钥。
N8N_RUNNERS_MAX_CONCURRENCY=5 运行器可以执行的并发任务数。
N8N_RUNNERS_TASK_BROKER_URI=localhost:5679 n8n 实例内的任务代理服务器的地址。
N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=15 关闭任务运行器进程前等待的闲置秒数。当有新任务要执行时,启动器将自动重新启动运行器。设置为可禁用自动关闭。
NODE_OPTIONS=--max-old-space-size=<limit> 任务运行器 Node.js 进程的内存限制。该限制应低于容器的限制,以便运行器先于容器耗尽内存。这样,启动器就能监控运行器。
GENERIC_TIMEZONE 与 n8n 实例配置的默认时区相同。

有关环境变量的完整列表,请参阅任务运行器环境变量