Node.js工作者/后台进程

时间:2011-01-21 17:45:21

标签: node.js delayed-job resque

如何在node.js中创建和使用后台作业?

我遇到过两个libs(node-resque和node-worker)但是想知道是否有更多的东西。

2 个答案:

答案 0 :(得分:45)

我对此做了一些研究,我会这样做。

设置

beanstalkd

  1. 安装beanstalkd。另一个消息队列 BUT 这个支持DELAYED PUTS。如果你从源代码编译它将会有点困难,因为它取决于libevent(如memcached)。但话说回来,我认为你不必从源代码编译它,因为有很多binary packages可用。例如,在Ubuntu上,您可以通过发出命令来安装beanstalkd:

    sudo apt-get install beanstalkd

  2. 节点豆茎的客户端

    1. 安装beanstalkd客户端库。我找到的最好的是node-beanstalk-client。因为在beanstalkd客户端库列表中没有/未提及此库(然后我可以再次向列表中添加条目,因此我将添加此库)。我更喜欢这个库而不是其他库的原因是:

      1. Npm包:我喜欢使用npm包来安装客户端库。其他人没有。
      2. 积极开发:我更喜欢具有更多/更多提交的库。
    2. 要安装它,在安装npmthe write way)后,您只需发出以下命令:

      npm install beanstalk_client
      

      代码

      consumer.js

      var client = require('beanstalk_client').Client;
      
      client.connect('127.0.0.1:11300', function(err, conn) {
          var reserve = function() {
              conn.reserve(function(err, job_id, job_json) {
                  console.log('got job: ' + job_id);
                  console.log('got job data: ' + job_json);
                  console.log('module name is ' + JSON.parse(job_json).data.name);
                  conn.destroy(job_id, function(err) {
                      console.log('destroyed job');
                      reserve();
                  });
              });
          }
      
          reserve();
      });
      

      首先启动消费者:

      node consumer.js 
      

      接下来开始producer.js。执行producer.js后五秒钟(我指定延迟),consumer.js将处理该消息。

      producer.js

      var client = require('beanstalk_client').Client;
      client.connect('127.0.0.1:11300', function(err, conn) {
          var job_data = {"data": {"name": "node-beanstalk-client"}};
          var priority = 0;
          var delay = 5;
          var timeToRun = 1;
          conn.put(priority, delay, timeToRun, JSON.stringify(job_data), function(err, job_id) {
              console.log('put job: ' + job_id);
              process.exit();
          });
      });
      

      开始问题:

      node producer.js
      

答案 1 :(得分:13)

我正在使用Kue

  

Kue是由redis支持的node.js的功能丰富的优先级作业队列。 Kue的一个关键特性是其干净的用户界面,用于查看和管理排队,活动,失败和已完成的作业。