Wie kann man in Go Hintergrundverarbeitung / Warteschlangenbildung durchführen?
Beispiel: Ein Benutzer meldet sich an und Sie senden ihm eine Bestätigungs-E-Mail - Sie möchten die Bestätigungs-E-Mail im Hintergrund senden, da sie langsam sein kann und der Mail-Server möglicherweise nicht erreichbar ist usw. usw.
In Ruby ist eine sehr schöne Lösung DelayedJob , die Ihren Job in eine relationale Datenbank (dh einfach und zuverlässig) einreiht, und verwendet dann Hintergrund-Worker, um die Aufgaben auszuführen, und versucht erneut, wenn der Job fehlschlägt.
Ich suche nach einer einfachen und zuverlässigen Lösung, nicht nach einem niedrigen Level, wenn möglich.
Während Sie einfach eine Goroutine öffnen und jede asynchrone Aufgabe ausführen können, die Sie wollen, ist dies keine großartige Lösung, wenn Sie Zuverlässigkeit wünschen, d. h. das Versprechen, dass wenn Sie eine Aufgabe auslösen, diese erledigt wird.
Wenn Sie wirklich Produktionsqualität benötigen, entscheiden Sie sich für eine verteilte Arbeitswarteschlange. Ich kenne keine solchen Warteschlangen, die spezifisch für golang sind, aber Sie können mit rabbitmq, beanstalk, redis oder ähnlichen Warteschlangen-Engines arbeiten, um solche Aufgaben aus Ihrem Prozess auszulagern und Fehlertoleranz und Warteschlangenpersistenz hinzuzufügen.
Eine einfache Gorroutine kann den Job machen: Ссылка
Öffnen Sie eine gorutine mit der E-Mail-Zustellung und beantworten Sie dann die HTTP-Anfrage oder was auch immer
Wenn Sie eine Arbeitswarteschlange verwenden möchten, können Sie Rabbitmq oder Beanstalk Client wie folgt verwenden: Ссылка Ссылка
Oder vielleicht können Sie eine Warteschlange in Ihrem Prozess mit einer FIFO-Warteschlange erstellen, die in einer Goroutine ausgeführt wird Ссылка
Aber vielleicht ist die beste Lösung diese Jobwarteschlangenbibliothek, mit dieser Bibliothek können Sie das Limit für den gemeinsamen Zugriff einstellen, usw.: Ссылка
%Vor%Ich habe eine Bibliothek zum Ausführen asynchroner Aufgaben mit einer Nachrichtenwarteschlange erstellt (derzeit sind RabbitMQ und Memcache Broker unterstützt, aber andere Broker wie Redis oder Cassandra könnten einfach hinzugefügt werden).
Sie können einen Blick darauf werfen. Es könnte gut genug für Ihren Anwendungsfall sein (und es unterstützt auch Verkettung und Workflows).
Es ist jedoch ein Frühphasenprojekt.
Tags und Links go