Кластеризованный сервис JBoss, отправляющий электронные письма из текстового файла

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

Вопрос

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

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

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

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

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

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

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

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

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

Решение

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

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