4

NodeJS から Resque ジョブをキューに入れたい。Redis コマンドの監視:

1346127083.495055 "sadd" "resque:w:tasks:queues" "facebook"
1346127083.495471 "rpush" "resque:w:tasks:queue:facebook" "{\"class\":\"Hello::FacebookFriends\",\"args\":[\"2342324\"]}"

これらのコマンドをノードから直接発行するとうまくいくようです。隠れたバグや私が気付いていないことはありますか?

更新: 私の仕事は Ruby で書かれています。私は NodeJS が大好きで、Javascript の方がはるかに優れていますが、NPM ではまだ良好な状態で利用できないライブラリがたくさん必要です。たとえば、Twitter や Facebook との通信 (Twitter と Koala の宝石、Node に匹敵するものはありません)。そこで、NodeJS サービスから Ruby ジョブを開始したいと考えています。

これまでのところ、coffee-resque のこの関数に似たものを使用しています。

 enqueue: (queue, func, args) ->
    @redis.sadd  @key('queues'), queue
    @redis.rpush @key('queue', queue),
      JSON.stringify class: func, args: args || []

ここ:

job = JSON.stringify
    class: 'Hello::FacebookFriends'
    args: [user_id, fb.id]
@redis_client.multi()
    .sadd('resque:w:tasks:queues', 'facebook')
    .rpush('resque:w:tasks:queue:facebook', job)
    .exec()
4

4 に答える 4

4

使用する必要があると思います: https://github.com/technoweenie/coffee-resque

(名前にはコーヒーと書かれていますが、javascript でも使用できます) 見た目もかなりシンプルで、予期しない結果や重大な変更などに対して少し安全になります。

于 2012-08-29T16:24:14.990 に答える
2

TaskRabbit から node-resque を使用できます

ラムダコード

const NodeResque = require('node-resque')
const connectionDetails = {
  pkg: 'ioredis',
  host: 'redis host',
  port: 6379
}
const queue = new NodeResque.Queue({
  connection: connectionDetails
})
queue.on('error', function(error) {
  console.log(error)
})
await queue.connect()
await queue.enqueue('queue_name', 'WorkerClassName', ['arg1', 'arg2', ..])
await queue.end()

タスクを処理する Rails ワーカー コード

class WorkerClassName
    @queue = :queue_name
    def self.perform(arg1, arg2, arg3)
        # Logic
    end
end
于 2019-02-05T07:20:22.217 に答える
1

ジョブを起動するサービスを設定してみませんか? これはネットワークを介した余分なホップになりますが、コードは十分に単純でなければなりません (たとえば、 http://www.sinatrarb.com/を見てください)。

于 2012-09-04T17:18:01.317 に答える