从node.js向rails-sidekiq队列添加作业

时间:2013-11-04 09:34:54

标签: ruby-on-rails-3 node.js sidekiq

我有2个应用。 1是rails app,另一个是node.js。我在Rails应用程序中使用sidekiq。我的node.js应用程序将收到大量的http帖子(至少20 req / sec),我需要这些请求由rails应用程序处理。

我找到的最好方法是将这些请求放在sidekiq队列中,并让Rails尽可能地处理它们。是否可以从另一个应用程序向sidekiq添加作业?这是通过直接与redis交谈来完成的吗?这项工作将非常简单:

message_type
source
payload

这些字段出现在最初的http post请求中。

我想过直接使用rails作为第一个入口点,但当涉及到大量并发http请求时,rails并不是那么好。

关于如何从外部轨道向sidekiq队列添加作业的任何想法?

1 个答案:

答案 0 :(得分: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