2012-08-28 46 views
4

我想對來自NodeJS的Resque作業進行排隊。監視Redis命令我看到:來自NodeJS的隊列Resque Jobs

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

直接從Node發出這些命令似乎工作。有沒有隱藏的錯誤或我不知道的東西在這裏?

更新:我的工作是用Ruby編寫的。儘管我喜歡NodeJS,並且我在Javascript中的表現更好,但我仍然需要大量的圖書館,這些圖書館在NPM中仍然處於非常好的狀態,例如與Twitter和Facebook進行通信(Twitter和Koala寶石,沒有任何可比的節點)。所以我想從我的NodeJS服務啓動Ruby Jobs。

到目前爲止,我使用的東西,看起來類似於從咖啡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() 

回答

1

爲什麼不建立一個可以關閉工作的服務?這將是通過網絡的額外跳躍,但代碼應該足夠簡單(例如,請參閱http://www.sinatrarb.com/)。

+0

你是什麼意思?在ruby中創建一個路由然後從Node ping它? – CamelCamelCamel

+0

準確地說,創建一個路線,在被調用時創建該作業。這不是一個漂亮的解決方案,但它應該做你需要的。 –

4

我認爲你應該使用:https://github.com/technoweenie/coffee-resque

(該名稱說咖啡,但你也可以使用它與JavaScript) 看起來也很簡單,你會更安全一些,以防止意想不到的結果,打破茶nges等

+0

哦哇,我確定它是一個真正的Resque PORT(就像他們的文檔所說的那樣)。謝謝。 – CamelCamelCamel

+0

這是一個港口!我只需要查看源代碼就可以知道我錯了。此外,似乎並不是,我可能在這裏錯誤地爲工人產生單獨的線程。什麼。 – CamelCamelCamel

+0

嗯,我想你想從Node.js入隊工作。而咖啡復古就是這樣。 如果你只是想入隊,你爲什麼關心工人? 顯然咖啡resque中的入隊函數是微不足道的,所以你可以複製它。我只是指出,通過使用它,你可以安全地認爲,如果resque格式的更改完成,那麼咖啡更新將爲您處理。 – Benja

0

您可以使用TaskRabbit的node-resque庫來執行此操作。

這是一個an article,可能會幫助您開始。它還有一個指向Heroku託管的演示的鏈接,您可以在其中連接Redis實例並查看Resque隊列和作業。