Golang Hintergrundverarbeitung
Wie kann man hintergrund-Verarbeitung/- queueing-in Gehen?
Beispielsweise ein Benutzer anmeldet, und Sie schicken Ihnen eine Bestätigungs-E - Mail-Sie möchten senden Sie die Bestätigungs-E-Mail im hintergrund, wie es sein kann, langsam, und die E-mail-server ist möglicherweise heruntergefahren, etc etc.
In Ruby eine sehr schöne Lösung ist DelayedJob, die stellt Ihre Arbeit mit einer relationalen Datenbank (d.h. einfache und zuverlässige), und verwendet dann background Arbeiter zum ausführen der Aufgaben, und wiederholt, wenn der job fehlschlägt.
Ich bin auf der Suche nach eine einfache und zuverlässige Lösung, nicht etwas niedrigen Niveau, wenn möglich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Während Sie könnte öffnen Sie einfach eine goroutine und jede asynchrone Aufgabe, die Sie wollen, ist dies nicht eine große Lösung, wenn Sie wollen Zuverlässigkeit, d.h. das Versprechen, dass, wenn Sie Sie auslösen, eine Aufgabe wird erledigt.
Wenn Sie wirklich brauchen diese Produktions-Klasse, entscheiden sich für eine verteilte Warteschlange. Ich weiß nicht, von solchen Warteschlangen-spezifischen golang, aber man kann auch mit rabbitmq, beanstalk, redis oder ähnliche queuing-Motoren auslagern solcher Aufgaben, die aus dem Prozess, und fügen Sie die Fehlertoleranz und die Warteschlange Persistenz.
Einem einfachen Goroutine kann den job:
http://golang.org/doc/effective_go.html#goroutines
Öffnen Sie eine gorutine mit Lieferung per E-Mail und dann die Antwort an den HTTP-request oder was auch immer
Wenn Sie möchten, verwenden Sie eine workqueue, die Sie verwenden können, Rabbitmq oder Beanstalk-client wie:
https://github.com/streadway/amqp
https://github.com/kr/beanstalk
Oder vielleicht Sie können eine Warteschlange erstellen, in die Sie verarbeiten, mit einer FIFO-Warteschlange laufen in einer goroutine
https://github.com/iNamik/go_container
Aber vielleicht die beste Lösung ist, diesen job queue-Bibliothek mit dieser Bibliothek können Sie die concurrency-limit, etc:
https://github.com/otium/queue
Habe ich eine Bibliothek für die Ausführung von asynchronen Aufgaben mithilfe eines message queue (derzeit RabbitMQ und Memcache unterstützt Maklern, sondern auch andere Broker wie Redis oder Cassandra könnte leicht Hinzugefügt werden).
Können Sie einen Blick. Es könnte gut sein, genug für Ihren Fall (und es unterstützt auch die Verkettung und workflows).
https://github.com/RichardKnop/machinery
Es ist in einem frühen Stadium Projekt.
Können Sie auch goworker Bibliothek um Aufträge zu planen.
http://www.goworker.org/