Domanda

Sto costruendo un semplice motore di ricerca ricetta con Ruby e Sinatra per un app iPhone, utilizzando RabbitMQ per la mia coda di messaggi. Sto guardando in giro e trovare un sacco di scelte diverse di attuazione per i processi in background, ma la maggior parte di loro sia implementare algoritmi coda di messaggi personalizzati o operare come Rails plugin.

Cosa c'è là fuori in termini di librerie lavoratori quadro-agnostic di alta qualità che gioca bene con RabbitMQ?

E ci sono delle migliori pratiche che dovrebbero tenere a mente durante la scrittura del codice dei lavoratori, oltre l'ovvio:

# BAD, don't do this!
begin
  # work
rescue Exception
end
È stato utile?

Soluzione 2

ho finito per scrivere la mia libreria in un momento di incontrollabile Yak-rasatura . Kit Daemon era l'idea generale di destra, ma sul serio troppo pesante per le mie esigenze. Non voglio quello che sembra un rotaie app completa per ciascuno dei miei demoni. Sto per finire con almeno 3 demoni, e che sarebbe un disastro colossale di directory. Il daemon gemma ha un API orribile, e mentre ero tentato di astrarre via, ho capito che era probabilmente più facile da gestire solo la forcella me stesso, ed è quello che ho fatto.

API simile a questo:

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)

E poi basta usare il task rake incluso per start / stop / riavvio o controllare lo stato. Ho preso una pagina dal playbook Rack: tutto ciò che implementa il metodo call è un gioco equo come argomento ai metodi ChainGang.prepare e ChainGang.work, quindi un Proc è un oggetto operaio valida

.

mi ha richiesto più tempo per costruire di quanto non avrebbe fatto di usare qualcosa di diverso, ma ho un vago sospetto che sarà pagare nel lungo periodo.

Altri suggerimenti

Sto usando fagiolo magico e ho scritto i miei demoni usando il demoni gemma . kit Daemon è un nuovo progetto, ma i cicli di coda non sono ancora implementate. Si può anche dare un'occhiata alla Nanite se si adatta alle vostre esigenze, è indipendente dal quadro .

Scopri nanite (scritto in Ruby), è un giovane progetto scritto in cima RabbitMQ.

github.com/ezmobius/nanite/tree/master

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top