【问题标题】:Call sidekiq worker from separate process从单独的进程调用 sidekiq 工作人员
【发布时间】:2018-08-10 01:05:56
【问题描述】:

我在 rails 项目目录中有一个普通的 sidekiq worker。每次新数据出现在 RabbitMQ 队列中时,它都应该作为监听器并触发。为了优化项目,决定将来自 RabbitMQ 的消息侦听移到一个单独的进程中,并从那里调用主项目中的工作人员。

问题是如何将任务从单独的进程发送到 rails sidekiq 项目?

或者如果您有其他想法如何实现,请告诉我

【问题讨论】:

    标签: ruby-on-rails ruby rabbitmq sidekiq


    【解决方案1】:

    以下是 Sidekiq 能够理解的将作业推送到 Redis 的方法:

    require 'securerandom'
    require 'json'
    
    redis = Redis.new(:url => 'redis://hostname:port/db')
    msg = { "class" => 'MyWorker',
        "queue" => 'default',
        "args" => [1, 2, 3],
        'retry' => true,
        'jid' => SecureRandom.hex(12),
        'created_at' => Time.now.to_f,
        'enqueued_at' => Time.now.to_f }
    redis.lpush("queue:default", JSON.dump(msg))
    

    https://github.com/mperham/sidekiq/wiki/FAQ#how-do-i-push-a-job-to-sidekiq-without-ruby

    【讨论】:

      【解决方案2】:

      Sidekiq 通过其位于 Redis 中的队列管理任务。只要两个进程都在与同一个 Redis 实例通信,这应该可以正常工作。

      【讨论】:

        猜你喜欢
        • 2013-11-05
        • 2018-11-05
        • 1970-01-01
        • 2015-12-07
        • 2013-07-10
        • 2012-10-05
        • 1970-01-01
        • 2015-09-20
        • 2015-08-05
        相关资源
        最近更新 更多