Frage

Ich möchte eine Aufgabe starten, die eine Verbindung zu einem herstellt IMAP und E-Mail-Daten zum Speichern in der Datenbank bereitstellen.

Nun hätte ein solcher Job ein riesiges Volumen, um viele zu unterstützen IMAP Konten.Ich möchte die Clusterfunktionen von Akka nutzen, die diese Jobs auf vordefinierten Maschinen in einem Netzwerk ausführen und bei Fehlern beim Datenabruf erneute Versuche durchführen können IMAP Gastgeber.

Ich möchte einen Akka-Cluster erstellen, der gestartet wird IMAP Job abrufen (über einen Schauspieler ??!!).

IMAP Da es sich um ein kniffliges Protokoll handelt, kann es sein, dass keine Verbindung zum Remote-Host hergestellt werden kann.In einem solchen Fall sollte ein Akteur mehrere konfigurierbare Male versuchen, eine Verbindung herzustellen und abzurufen.

Irgendwann sollte es als mein dienen IMAP Back-End abrufen.

Wie soll ich vorgehen?

War es hilfreich?

Lösung

Wir nutzen Akka häufig, unter anderem um über JavaMail/IMAP eine Verbindung zu den E-Mail-Konten der Benutzer herzustellen und neue Nachrichten von diesen zu verarbeiten.Fehlertoleranz ist ein wichtiger Teil des Puzzles.So ist unser Backend ungefähr aufgebaut:

  1. Der Supervisor-Knoten verfügt über einen Akteur, der Benutzer aus der Datenbank zur Verarbeitung auswählt
  2. IMAP-Mitarbeiter benachrichtigen den Vorgesetzten, wenn sie zur Arbeit bereit sind (weitere Informationen zu dieser „Work-Pulling“-Architektur finden Sie im Blogbeitrag meines Kollegen Ryan Tanner: http://blog.goconspire.com/post/64901258135/akka-at-conspire-part-5-the-importance-of-pulling)
  3. Supervisor sendet eine ProcessAccount-Nachricht – ein benutzerdefiniertes Objekt einschließlich eines Gmail-OAuth-Tokens (Sie können auch herkömmliche Anmeldeinformationen mit Benutzername und Passwort verwenden) – an den inaktiven IMAP-Worker.
  4. Der IMAP-Worker verwendet JavaMail, um neue Nachrichten zu lesen und zu verarbeiten.Bei einem Fehler sendet es eine FailedProcessing-Nachricht – ein benutzerdefiniertes Objekt mit einem Fehlercode und einer für Menschen lesbaren Zeichenfolge – zurück an den Supervisor-Akteur.Bei Erfolg wird CompletedProcessing gesendet.
  5. Der Supervisor aktualisiert den Benutzerdatensatz in der Datenbank und setzt einen Fehlercode, wenn die Verarbeitung fehlschlägt.
  6. Zusätzlich zur regelmäßigen Verarbeitung fehlerfreier Konten versucht der Supervisor die Verarbeitung für ausgefallene Konten erneut.In unserem Anwendungsfall versuchen wir nur einmal am Tag eine erneute Verarbeitung, Sie könnten dies jedoch viel häufiger tun.

Mithilfe von Akka-Clustering halten wir die Mitarbeiter vom Vorgesetzten getrennt.Die Kombination dieses Ansatzes mit dem oben beschriebenen Work-Pull-Mechanismus hält uns relativ tolerant gegenüber nicht behebbaren Fehlern, z. B.OutOfMemoryErrors, in den Workern.

Andere Tipps

Verwenden Sie JavaMail.Lies das JavaMail-FAQ.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top