Transaktionale E-Mails und SMS
Nachrichten zu Registrierung, Quittung und Passwort-Reset werden von der Web-App eingereiht und von einem Pool von Workern versendet.
FIFO-Queues, die keine Jobs verlieren, wenn ein Worker ausfällt, mit Produzenten und Konsumenten, die parallel laufen.
Jeder Dienst fügt Arbeit hinzu, ohne auf Konsumenten zu warten.
Ein animierter Durchlauf mit echten HotKV-Befehlen und Beispielantworten. Klicken Sie auf einen Schritt, um direkt dorthin zu springen. Befehle und Antworten bleiben auf Englisch, genau so, wie Sie sie in HotKV eingeben und sehen.
Hintergrundarbeit wie E-Mails, Bildskalierung und Webhooks braucht eine Queue zwischen dem Code, der sie erzeugt, und dem Code, der sie erledigt. Eine Queue, die einen Job verliert, wenn ein Worker mitten in der Aufgabe abstürzt, ist schlimmer als gar keine, weil niemand bemerkt, dass der Job weg ist.
Listen ergeben eine einfache FIFO-Queue. BLMOVE verschiebt jeden Job in dem Moment, in dem er an einen Worker geht, auf eine Verarbeitungsliste, sodass ein laufender Job immer irgendwo gespeichert ist, falls dieser Worker verschwindet. Produzenten und Konsumenten werden von parallelen Worker-Threads bedient.
Jeder Dienst fügt Arbeit hinzu, ohne auf Konsumenten zu warten.
LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"BLMOVE blockiert, bis ein Job verfügbar ist, und verschiebt ihn dann in einem Schritt auf eine Verarbeitungsliste.
BLMOVE queue:emails queue:emails:processing RIGHT LEFT 0Die E-Mail ist raus. Der Job wird von der Verarbeitungsliste entfernt.
LREM queue:emails:processing 1 "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"Worker 2 fällt mitten im Job aus. Sein Job liegt weiter in der Verarbeitungsliste und ist nicht verloren.
LRANGE queue:emails:processing 0 -1Ein Monitor verschiebt den liegen gebliebenen Job zurück in die Queue, und ein anderer Worker übernimmt ihn.
LMOVE queue:emails:processing queue:emails LEFT RIGHTNachrichten zu Registrierung, Quittung und Passwort-Reset werden von der Web-App eingereiht und von einem Pool von Workern versendet.
Uploads werden für Vorschaubilder und Transcoding eingereiht, und ein abgestürzter Transcoder verliert nie eine Datei.
Ausgehende Webhooks werden eingereiht und erneut versucht, ohne die Anfrage zu blockieren, die sie ausgelöst hat.
LPUSH mit BRPOP, und Worker schlafen, bis Arbeit eintrifft.
LPUSHBRPOPBLMOVE übergibt jeden Job atomar an eine Verarbeitungsliste.
BLMOVELREMProduzenten und Konsumenten werden von parallelen Worker-Threads bedient.
Für Bestätigungen, Consumer Groups und Replay verwenden Sie Streams.
XADDXREADGROUPWenn Sie Jobs mit BLMOVE übernehmen, liegt der Job in der Verarbeitungsliste. Ein Monitor kann alles, was dort zu lange liegt, zurück in die Queue verschieben.
Nein. BRPOP und BLMOVE blockieren, bis ein Job eintrifft, mit optionalem Timeout.
Listen sind die einfachste Queue. Streams ergänzen Consumer Groups, Bestätigung pro Nachricht und Verlauf. Siehe den Anwendungsfall Event-Streaming.
HotKV spricht das Redis-Protokoll, sodass Sie einen bestehenden Client darauf richten und genau diese Befehle ausführen können.