如何用一个ruby作业和一个python worker来使用Faktory?

问题描述 投票:0回答:1

我想用一个ruby脚本将工作提交到faktory服务器上(https:/github.comcontribsysfaktorywiki。)来启动一个python worker。Faktory应该可以完美地实现这一点,因为它的语言不可知,但是文档中只涵盖了ruby(job和worker)或者python(job和worker)的情况。简单来说,我有两个问题。

  • 如何在python端注册worker,使其在ruby端可以寻址?
  • 如何正确编写ruby作业的代码(特别是,是否需要执行方法)?

这里有一个最小(不是)的工作示例。首先是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).

再来谈谈这两个问题。

  • ruby作业是否需要一个 "perform() "方法?
  • 我如何告诉ruby作业从faktory中需要'PythonWorker'?

目前我需要把python Worker注册为'ActiveJob::QueueAdapters::FaktoryAdapter::JobWrapper'。

也许有用的是一个最小的ruby作业和python worker的例子,类似于ruby的例子(https:/github.comcontribsysfaktorywikiGetting-Started-Ruby。)或python(https:/www.mikeperham.com20190108using-faktory-with-python)而已。

python ruby sidekiq
1个回答
0
投票

你的Ruby代码根本不需要任何工作。工作就是Python。Ruby代码只需要创建作业记录并发送给Faktory,这样python Worker就可以接收它。在Ruby中,你可以使用普通的Faktory::Client API来创建一个基本的工作。

c = Faktory::Client.new
c.push('jobtype' => 'PythonWorker', 'args' => [1], 'queue' => 'default')

启动Faktory,启动一个faktory_worker_python进程,然后在你的Ruby应用程序中运行这些代码。

© www.soinside.com 2019 - 2024. All rights reserved.