【问题标题】:Add jobs to a rails-sidekiq queue from node.js从 node.js 将作业添加到 rails-sidekiq 队列
【发布时间】:2013-11-14 21:41:00
【问题描述】:

我有 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 并不是那么好。

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

【问题讨论】:

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


    【解决方案1】:

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

    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
    

    【讨论】:

    • @Muntasim 你确定你使用的是正确的redis实例和数据库吗?
    猜你喜欢
    • 2016-03-01
    • 2013-06-16
    • 2014-11-04
    • 2018-02-25
    • 2022-08-20
    • 2021-11-02
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多