JBoss Clustered Service, который отправляет электронные письма из текстового файла - PullRequest
1 голос
/ 15 марта 2010

Мне нужно немного подтолкнуть в правильном направлении. Вот моя проблема: мне нужно создать сверхнадежный сервис, который отправляет почтовые сообщения клиентам, чьи адреса хранятся в txt-файле на FTP-сервере. Один текстовый файл может содержать неограниченное количество записей. Чаще всего файл содержит около 300 000 записей.

Сервис предоставляет интерфейс всего двумя простыми способами:

TaskHandle sendEmails(String ftpFilePath);
ProcessStatus checkProcessStatus(TaskHandle taskHandle);

Метод sendEmails () возвращает TaskHandle, с помощью которого мы можем запросить ProcessStatus.

Для такой службы необходима надежная кластеризация. Обработка одного текстового файла может занять много времени. Перезапуск одного узла в кластере не должен влиять на отправку электронной почты.

Мы используем JBoss AS 4.2.0, который поставляется с красивым HASingletonController, который обеспечивает работу одного экземпляра службы в данный момент времени.

Но как только происходит аварийное переключение, вторая служба должна продолжить работу с того места, где остановилась первая.

Как я могу разделить состояние между узлами в кластере таким образом, чтобы не было возможности отправлять несколько писем дважды?

1 Ответ

3 голосов
/ 15 марта 2010

Вы можете использовать обмен сообщениями, чтобы отделить чтение файла от отправки почты. Пусть один процесс прочитает файл и отправит сообщения JMS, содержащие от 1 до N адресов электронной почты, а MDB получит сообщения и отправит электронные письма. Другим вариантом является прямая синхронизация с базой данных, позволяющая процессу чтения вставлять адреса и статус в БД, а ваша служба считывает адреса из базы данных, отправляет электронные письма и обновляет статус ...

...