Как использовать Faktory с ruby заданием и python работником? - PullRequest
0 голосов
/ 22 апреля 2020

Я хочу использовать сценарий ruby для отправки заданий на сервер фактора (https://github.com/contribsys/faktory/wiki) для запуска python работника. Faktory должен быть идеальным для этого языка c, но документация охватывает только случаи ruby (работа и работник) или python только (работа и работник). У меня два вопроса:

  • Как зарегистрировать работника на стороне python, чтобы его можно было адресовать со стороны ruby?
  • Как правильно кодировать ruby задание (в частности, требуется ли метод выполнения)?

Вот минимальный (не) рабочий пример. Во-первых, рабочий файл python:

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 метод 'execute ()'?
  • Как указать, что задание ruby требуется от фактора 'PythonWorker'?

На данный момент мне нужно зарегистрировать работника python как 'ActiveJob :: QueueAdapters :: FaktoryAdapter :: JobWrapper'.

Может быть полезным будет минимальный пример задания ruby и работника python, аналогичный примерам для ruby (https://github.com/contribsys/faktory/wiki/Getting-Started-Ruby) или python (* Только 1034 *https://www.mikeperham.com/2019/01/08/using-faktory-with-python/).

1 Ответ

0 голосов
/ 23 апреля 2020

Ваш код Ruby вообще не нуждается ни в каких заданиях. Работа Python. Код Ruby просто необходим для создания и отправки записи о работе в Faktory, чтобы рабочий python мог ее забрать. В Ruby вы создаете базовое c задание, используя простой старый Faktory :: Client API:

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

Запустите Faktory, запустите процесс faktory_worker_ python и запустите этот код в своем Ruby приложение.

...