我有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队列添加作业的任何想法?
答案 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