4

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

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

message_type
source
payload

这些字段存在于初始 http post 请求中。

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

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

4

1 回答 1

5

显然这并不难。这是我使用的代码:

npm install sidekiq --save

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

const client = redis.createClient(); // Will create a connection to redis DB 0 on 127.0.0.1
const 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
于 2013-11-04T09:53:25.570 回答