如何将 Faktory 用于 ruby 工作和 python 工人?

How to use Faktory with a ruby job and a python worker?

我想使用 ruby 脚本将作业提交到 faktory 服务器 (https://github.com/contribsys/faktory/wiki) 以启动 python worker。 Faktory 应该是完美的,因为它与语言无关,但文档仅涵盖 ruby(工作和工人)或 python(工作和工人)案例。很快,我有两个问题:

这是一个最小的(不是)工作示例。 首先,python worker 文件:

from faktory import Worker 
import logging
logging.basicConfig(level=logging.INFO)

def python_worker(var_int):
    print(var_int)

w = Worker(queues=['default'], concurrency=1)
w.register('PythonWorker', python_worker)
w.run()

现在 ruby 文件:

class RubyJob < ApplicationJob
    include Faktory::Job
    faktory_options retry: 5
    queue_as :default

  end

调用我使用的作业 RubyJob.perform_later(1)

回到两个问题:

目前我需要将 python 工人注册为 'ActiveJob::QueueAdapters::FaktoryAdapter::JobWrapper'。

可能有用的是 ruby 工作和 python 工人的最小示例,类似于仅 ruby (https://github.com/contribsys/faktory/wiki/Getting-Started-Ruby) or python (https://www.mikeperham.com/2019/01/08/using-faktory-with-python/) 的示例。

您的 Ruby 代码根本不需要任何作业。工作是Python。 Ruby 代码只需要创建作业记录并将其发送到 Faktory,以便 python 工人可以提取它。在 Ruby 中,您使用普通的旧 Faktory::Client API:

创建了一个基本作业
c = Faktory::Client.new
c.push('jobtype' => 'PythonWorker', 'args' => [1], 'queue' => 'default')

启动 Faktory,启动 faktory_worker_python 进程,然后 运行 在您的 Ruby 应用程序中编写该代码。