Кластер Akka в Java для получения IMAP с использованием Java Mail API

StackOverflow https://stackoverflow.com//questions/20022279

Вопрос

Я хочу запустить некоторую задачу, которая будет подключаться к IMAP и перенести данные электронной почты для хранения в базе данных.

Теперь такая работа будет иметь огромный объем, чтобы поддержать многих IMAP Счета.Я хочу использовать возможности кластера Akka, который может запускать эти задания на заранее определенном наборе компьютеров в сети и выполнять повторные попытки в случае ошибок при получении данных из IMAP хозяева.

Я хочу создать кластер akka, который запустится IMAP получить задание (через актера ??!!).

IMAP это сложный протокол, он может не удаться подключиться к удаленному хосту.В таком случае актер должен повторить попытку несколько настраиваемых раз для подключения и получения данных.

В конце концов он должен действовать как мой IMAP получить задний конец.

Как мне это сделать?

Это было полезно?

Решение

Мы активно используем Akka, в том числе для подключения и обработки новых сообщений из учетных записей электронной почты пользователей с использованием JavaMail/IMAP.Отказоустойчивость является важной частью головоломки.Вот примерно как устроен наш бэкэнд:

  1. Узел супервизора имеет актера, который выбирает пользователей из БД для обработки.
  2. Рабочие актеры IMAP уведомляют руководителя, когда они готовы к работе (подробнее об этой архитектуре «вытягивания работы» см. в блоге моего коллеги Райана Таннера: http://blog.goconspire.com/post/64901258135/akka-at-conspire-part-5-the-importance-of-pulling)
  3. Supervisor отправляет сообщение ProcessAccount — настраиваемый объект, включающий токен Gmail OAuth (вы также можете использовать традиционные учетные данные имени пользователя и пароля) — простаивающему работнику IMAP.
  4. Работник IMAP использует JavaMail для чтения и обработки новых сообщений.В случае ошибки он отправляет сообщение FailedProcessing — пользовательский объект, включающий код ошибки и удобочитаемую строку — обратно субъекту-супервизору.В случае успеха он отправляет CompletedProcessing.
  5. Супервизор обновляет запись пользователя в базе данных, включая установку кода ошибки в случае сбоя обработки.
  6. Помимо периодической обработки работоспособных учетных записей, супервизор повторяет обработку ошибочных учетных записей.Наш вариант использования таков, что мы пытаемся выполнить повторную обработку только один раз в день, но вы могли бы делать это гораздо чаще.

Используя кластеризацию Akka, мы отделяем работников от супервайзеров.Сочетание этого подхода с описанным выше механизмом вытягивания работы делает нас относительно толерантными к неисправимым ошибкам, например:OutOfMemoryErrors, в рабочих.

Другие советы

Используйте JavaMail.Прочтите Часто задаваемые вопросы по JavaMail.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top