You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Actionhero分布式部署:Resque调度主节点如何分配任务至远程Worker?

Actionhero多节点下Resque调度主节点分配任务到远程Worker的实现逻辑

好的,咱们来拆解这个场景下的任务分配机制,核心其实是靠共享Redis实例作为中间层来实现的,具体流程和配置要点如下:

1. 核心依赖:所有节点共享同一个Redis

Actionhero集成的Resque是基于Redis来存储任务队列的,所以你的调度主节点(localhost:8080)和Worker节点(localhost:8000)必须连接完全相同的Redis服务器——这是任务能跨节点分配的基础。

你需要确保两个节点的config/resque.js(或对应语言的配置文件)里的Redis配置完全一致,比如:

exports.default = {
  resque: function(api){
    return {
      redis: {
        host: "your-shared-redis-host", // 比如同一台服务器的IP或者Redis集群地址
        port: 6379,
        password: "your-redis-password", // 如果有密码的话
        database: 0 // 要使用同一个数据库编号
      },
      // 其他Resque配置...
    }
  }
}

2. 调度主节点的任务生产逻辑

当你把localhost:8080设为scheduler: true后,这个节点会承担以下角色:

  • 按照你配置的定时/周期性任务规则(比如tasks/目录下定义的任务),生成待执行的任务
  • 将这些任务推送到Resque的指定队列中——这个队列是存储在共享Redis里的,不是节点本地内存

举个例子,你在调度节点定义一个定时任务:

exports.default = {
  dailyCleanupTask: {
    name: "dailyCleanupTask",
    description: "清理过期数据的每日任务",
    queue: "cleanup", // 指定任务要进入的队列名
    frequency: 86400000, // 24小时执行一次
    run: function(api, params, next){
      // 这里写具体的任务逻辑
      api.log("执行每日清理任务", "info");
      next(null, "清理完成");
    }
  }
}

调度主节点到时间就会把这个任务推送到Redis里的cleanup队列。

3. Worker节点的任务消费逻辑

localhost:8000节点设置scheduler: false后,它就只做Worker的工作:

  • 监听你配置的Resque队列(在resque.queues数组里指定)
  • 从共享Redis的对应队列中拉取待执行的任务,然后执行

你需要在Worker节点的config/resque.js里配置要监听的队列,确保和调度主节点推送任务的队列名一致:

exports.default = {
  resque: function(api){
    return {
      scheduler: false,
      queues: ["cleanup", "default"], // 包含调度节点推送任务的队列名
      // 其他配置...
    }
  }
}

这样Worker节点就会自动从Redis的cleanup队列里取调度主节点推送的任务来执行。

4. 关键注意事项

  • 队列名称必须匹配:调度节点推送到哪个队列,Worker节点就得监听哪个队列,不然Worker拿不到任务
  • 任务定义要同步:所有节点的tasks/目录下的任务文件必须完全一致——因为Worker节点需要知道任务的执行逻辑(run方法),如果代码不一致会导致执行出错
  • 自动负载均衡:如果有多个Worker节点监听同一个队列,Resque会自动做负载均衡,Worker会按顺序从队列取任务执行

内容的提问来源于stack exchange,提问作者Tauseef Rehan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:07:35