Akka Cluster Em Java para IMAP de busca usando Java API de Correio
-
21-12-2019 - |
Pergunta
Eu quero ligar de alguma tarefa que vai ligar para um IMAP
e trazer dados de e-mail para armazenar no banco de dados.
Agora, tal trabalho teria enorme volume de oferecer suporte a muitos IMAP
contas.Eu quero aproveitar Akka recursos de cluster que pode executar esses trabalhos em conjunto predefinido de computadores em uma rede e fazer retrials em caso de erros durante a obtenção de dados a partir de IMAP
hosts.
Eu quero criar um akka cluster que irá disparar até IMAP
buscar trabalho ( através de um Ator ??!!).
IMAP
é difícil protocolo, pode falhar ao se conectar ao host remoto.Em suchcase um ator deve repetir várias configurável vezes para ligar e buscar.
Eventualmente, ele deve agir como a minha IMAP
buscar back-end.
Como eu devo fazer sobre isso ?
Solução
Nós usamos a Akka fortemente, incluindo se conectar e processar novas mensagens das contas de e-mail dos usuários usando o Javamail / IMAP. A tolerância a falhas é uma parte importante do quebra-cabeça. Aqui está aproximadamente como nosso backend está configurado:
- .
- O nó de supervisor tem um ator que seleciona usuários fora do DB para processamento
- IMAP atores de trabalhadores notificam o supervisor quando estão prontos para o trabalho (para mais sobre este "trabalho puxando" arquitetura, consulte o meu colega Ryan Tanner's Blog Post: http://blog.goconspire.com/post/64901258135/AKKA-AT-CONSPIE-PART-5 -o-importância-de-puxando )
- supervisor envia uma mensagem de processo - um objeto personalizado, incluindo um token do Gmail OAuth (você pode usar também credenciais de nome de usuário e senha) - para o trabalhador IMAP IMEP.
- O trabalhador imap usa javamail para ler e processar novas mensagens. Em um erro, ele envia uma mensagem de processamento com falha - um objeto personalizado, incluindo um código de erro e uma string legível por humanos - de volta ao ator do supervisor. No sucesso, ele envia aparência finalizada.
- O supervisor atualiza o registro do usuário no banco de dados, incluindo definir um código de erro se o processamento falhou.
- Além de processar periodicamente contas saudáveis, o supervisor tenta processamento para contas com falha. Nosso caso de uso é tal que só tentamos re-processamento uma vez por dia, mas você poderia fazer isso com muito mais frequência.
Usando o agrupamento AKKA, mantemos os trabalhadores separados do supervisor. Combinar essa abordagem com o mecanismo de tração do trabalho descrito acima nos mantém relativamente tolerantes a erros irrecuperáveis, e. OutofmemoryErrors, nos trabalhadores.
Outras dicas
Use javamail.Leia o javamail FAQ .