Каков наилучший вариант для независимой от фреймворка библиотеки Ruby Background Worker? - PullRequest
0 голосов
/ 27 мая 2009

Я создаю простую систему поиска рецептов с Ruby и Sinatra для приложения для iPhone, используя RabbitMQ для моей очереди сообщений. Я осматриваюсь и нахожу множество вариантов реализации для фоновых процессов, но большинство из них либо реализуют собственные алгоритмы очереди сообщений, либо работают как плагины Rails.

Что там с высококачественными рабочими библиотеками, не зависящими от фреймворка, которые будут хорошо работать с RabbitMQ?

И есть ли какие-то передовые практики, о которых следует помнить при написании рабочего кода, помимо очевидного:

# BAD, don't do this!
begin
  # work
rescue Exception
end

Ответы [ 3 ]

1 голос
/ 29 мая 2009

Я закончил тем, что написал свою собственную библиотеку в порыве неконтролируемого бритья яка. Комплект демона был правильной общей идеей, но серьезно слишком тяжелым для моих нужд. Я не хочу что-то похожее на полноценное приложение для каждого из моих демонов. Я собираюсь закончить как минимум 3-мя демонами, и это будет колоссальный беспорядок в каталогах. У гема демонов ужасный API, и, хотя у меня возникло желание абстрагировать его, я понял, что, вероятно, проще было просто самому управлять вилкой, вот что я и сделал.

API выглядит так:

require "rubygems"
require "chaingang"

class Worker
  def setup
    # Set up connections here
  end

  def teardown
    # Tear down connections here
  end

  def call
    # Do some work
    sleep 1
  end
end
ChainGang.prepare(Worker.new)

И затем вы просто используете включенную задачу граблей для запуска / остановки / перезапуска или проверки состояния. Я взял страницу из книги игр Rack: все, что реализует метод call, является честной игрой в качестве аргумента для методов ChainGang.prepare и ChainGang.work, поэтому Proc является допустимым рабочим объектом.

Мне потребовалось больше времени, чтобы построить, чем использовать что-то еще, но у меня есть смутное подозрение, что это окупится в долгосрочной перспективе.

1 голос
/ 27 мая 2009

Я использую Beanstalk и написал свои собственные демоны, используя гем daemons . Daemon kit - новый проект, но циклы очереди еще не реализованы. Вы также можете взглянуть на Nanite , если он соответствует вашим потребностям, он не зависит от фреймворка.

0 голосов
/ 30 мая 2009

Проверьте Nanite (написано на Ruby), это молодой проект, написанный на Rabbitmq.

github.com / ezmobius / Nanite / дерево / мастер

...