Domanda

Voglio attivare qualche compito che si connetterà a un IMAP e portare i dati di posta elettronica per archiviare nel database.

Adesso tale lavoro avrebbe un enorme volume per supportare molti account IMAP.Voglio sfruttare le funzionalità del cluster Akka che possono eseguire questi lavori in set predefinito di macchine in una rete e procedere in caso di errori durante il recupero dei dati da host IMAP.

Voglio creare un cluster Akka che attirerà il lavoro IMAP Fetch (tramite un attore ?? !!).

IMAP è un protocollo difficile potrebbe non essere possibile connettersi all'host remoto.In tale attore un attore dovrebbe riprovare diversi tempi configurabili per connettersi e recuperare.

Alla fine dovrebbe agire come il mio IMAP recupero.

Come dovrei andare a riguardo?

È stato utile?

Soluzione

Usiamo pesantemente Akka, incluso per connettersi e elaborare nuovi messaggi dagli account di posta elettronica degli utenti utilizzando JavaMail / IMAP. La tolleranza agli errori è una parte importante del puzzle. Ecco l'approssimazione come è stato impostato il nostro back-end:

    .
  1. Il nodo del supervisore ha un attore che seleziona gli utenti dal DB per l'elaborazione
  2. Gli attori dei lavoratori Imap notificano il supervisore quando sono pronti per il lavoro (per ulteriori informazioni su questo "lavoro tirando" l'architettura, consultare il mio collega Ryan Tanner's Blog Post: http://blog.goconspire.com/post/64901258135/akka-at-conspire-part-5 -L'importanza-del-tiratore )
  3. Supervisor invia un messaggio di elaborazione: un oggetto personalizzato tra cui un token OAuth Gmail (è possibile utilizzare anche le credenziali del nome utente e della password tradizionali) - al lavoratore IMAP inattivo.
  4. L'operatore IMAP utilizza JavaMail per leggere ed elaborare nuovi messaggi. Su un errore, invia un messaggio di manutenzione di falementazione: un oggetto personalizzato che include un codice di errore e una stringa leggibile dall'uomo - torna all'attore del supervisore. Successo, invia la progettazione completata.
  5. Il supervisore aggiorna il record utente nel database, incluso l'impostazione di un codice di errore se l'elaborazione non è riuscita.
  6. Oltre a elaborare periodicamente conti sani, il supervisore è stato elaborato per i conti falliti. Il nostro caso d'uso è tale che tentiamo solo rielaborazione una volta al giorno, ma potresti farlo molto più frequentemente.
  7. Usando il clustering Akka, teniamo i lavoratori separati dal supervisore. Combinare questo approccio con il meccanismo di tiratura del lavoro sopra descritto mi mantiene relativamente tollerante agli errori non rilevabili, ad es. Outocommoryerrors, nei lavoratori.

Altri suggerimenti

Usa JavaMail.Leggi il JavaMail FAQ .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top