2013-11-04 52 views
2

我有2個應用程序。 1是一個rails應用程序,另一個是node.js之一。我在Rails應用程序中使用sidekiq。我的node.js應用程序將收到大量的http帖子(至少20 req/sec),我需要由rails應用程序處理這些請求。將作業添加到node.js的rails-sidekiq隊列中

我發現的最好方法是把這些請求放在一個sidekiq隊列中,讓Rails在可以的時候處理它們。是否可以從另一個應用程序添加一個工作到sidekiq?這是通過直接與Redis對話完成的嗎?這項工作將非常簡單:

message_type 
source 
payload 

這些字段出現在最初的http post請求中。

我想直接使用rails作爲第一個入口點,但是當涉及到大量的併發http請求時,rails並不是那麼好。

任何有關如何從外部軌道添加作業到sidekiq隊列的想法?

回答

5

顯然這並不困難。這裏是我使用的代碼:

npm install sidekiq --save 

// Node.js 
// app.js 
var redis = require("redis") 
var Sidekiq = require("sidekiq") 

client = redis.createClient(); // Will create a connection to redis DB 0 on 127.0.0.1 
sidekiq = new Sidekiq(client); // Will instantiate a sidekiq object which we use to add jobs 

sidekiq.enqueue("MyProcessor", ["some-source", "TEST_MESSAGE_TYPE", "Some payload; More payload"], { 
    retry: false, 
    queue: "default" 
}); // Will enqueue a job in the "default" queue with the 3 arguments 


# Rails 
# app/workers/my_processor.rb 
class MyProcessor 
    include Sidekiq::Worker 
    sidekiq_options retry: false 

    def perform(source, message_type, payload) 
    logger.debug("Message is being processed: #{source} - #{message_type} - #{payload}") 
    end 
end 
+0

@Muntasim你確定你使用的是正確的redis實例和db嗎? – Oktav