Добавьте задания в очередь rails-sidekiq из node.js

У меня есть 2 приложения. 1 — это приложение для рельсов, а другое — для node.js. Я использую sidekiq в приложении Rails. Мое приложение node.js будет получать огромное количество http-сообщений (не менее 20 запросов в секунду), и мне нужно, чтобы эти запросы обрабатывались приложением rails.

Лучший способ, который я нашел, — это поместить эти запросы в очередь sidekiq и заставить Rails обрабатывать их, когда это возможно. Можно ли добавить работу в sidekiq из другого приложения? Это делается путем прямого разговора с Redis? Работа будет очень простой:

message_type
source
payload

Эти поля присутствуют в исходном HTTP-запросе на публикацию.

Я думал об использовании рельсов напрямую в качестве первой точки входа, но рельсы не так хороши, когда дело доходит до множества одновременных http-запросов.

Любые идеи о том, как добавить задание в очередь sidekiq из-за пределов рельсов?


person Oktav    schedule 04.11.2013    source источник


Ответы (1)


Видимо это не так сложно. Вот код, который я использовал:

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
person Oktav    schedule 04.11.2013
comment
@Muntasim Вы уверены, что используете правильный экземпляр Redis и БД? - person Oktav; 18.02.2015