Question

Je tiens à tirer jusqu'à ce qu'une tâche qui va se connecter à un IMAP et apporter de l'électronique de données à stocker dans la base de données.

Maintenant, un tel travail serait énorme volume de soutenir de nombreux IMAP comptes.Je tiens à effet de levier Akka les capacités de cluster qui peut exécuter ces travaux dans l'ensemble prédéfini de machines dans un réseau et ne rejugés en cas d'erreur lors de l'extraction de données à partir de IMAP les hôtes.

Je veux créer un akka cluster qui va au feu IMAP chercher de l'emploi ( par le biais d'un Acteur ??!!).

IMAP est difficile de protocole, elle peut ne pas se connecter à l'hôte distant.Dans suchcase un acteur doit recommencer plusieurs configurable fois pour se connecter et récupérer.

Finalement, il doit agir comme mon IMAP chercher de l'extrémité arrière.

Comment dois-je procéder ?

Était-ce utile?

La solution

Nous utilisons Akka fortement, y compris pour se connecter et processus nouveaux messages e-mail des utilisateurs des comptes à l'aide de JavaMail/IMAP.La tolérance aux pannes est une partie importante du puzzle.Voici à peu près comment notre backend est mis en place:

  1. Superviseur nœud a un acteur qui sélectionne les utilisateurs de la base de données pour le traitement des
  2. IMAP travailleur acteurs aviser le superviseur lorsqu'elles sont prêtes pour le travail (pour en savoir plus sur ce "travail de traction" de l'architecture, de voir mon collègue Ryan Tanner post de blog: http://blog.goconspire.com/post/64901258135/akka-at-conspire-part-5-the-importance-of-pulling)
  3. Superviseur envoie un ProcessAccount message--un objet personnalisé, y compris un Gmail jeton OAuth (vous pouvez utiliser les nom d'utilisateur et un mot de passe trop)--au ralenti IMAP travailleur.
  4. L'IMAP travailleur utilise JavaMail pour lire et traiter les nouveaux messages.Sur une erreur, il envoie un FailedProcessing message--un objet personnalisé, y compris un code d'erreur et lisible de la chaîne--retour vers le superviseur de l'acteur.En cas de succès, il envoie CompletedProcessing.
  5. Le superviseur des mises à jour de l'enregistrement de l'utilisateur dans la base de données, notamment l'établissement d'un code d'erreur si le traitement a échoué.
  6. En outre périodiquement le traitement des comptes sains, le superviseur de tentatives de traitement de l'échec des comptes.Notre cas d'utilisation est telle que nous n'tentative de re-traitement une fois par jour, mais vous pourriez le faire beaucoup plus souvent.

À l'aide de Akka de clustering, nous avons garder les travailleurs distinct du superviseur.En combinant cette approche avec le travail en tirant mécanisme décrit ci-dessus nous maintient relativement tolérant aux erreurs irrécupérables, par exempleOutOfMemoryErrors, dans les travailleurs.

Autres conseils

Utilisation JavaMail.Lire la JavaMail FAQ.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top