Кластеризованный сервис JBoss, отправляющий электронные письма из текстового файла
-
20-09-2019 - |
Вопрос
Мне нужен небольшой толчок в правильном направлении.Вот в чем моя проблема:Мне нужно создать сверхнадежный сервис, который отправляет сообщения электронной почты клиентам, адреса которых хранятся в текстовом файле на FTP-сервере.Один текстовый файл может содержать неограниченное количество записей.Чаще всего файл содержит около 300 000 записей.
Сервис предоставляет интерфейс всего двумя простыми методами:
TaskHandle sendEmails(String ftpFilePath);
ProcessStatus checkProcessStatus(TaskHandle taskHandle);
Метод SendEmails() возвращает TaskHandle, с помощью которого мы можем запросить ProcessStatus .
Для того чтобы такой сервис был надежным, необходима кластеризация.Обработка одного текстового файла может занять много времени.Перезапуск одного узла в кластере не должен влиять на отправку электронных писем.
Мы используем JBoss AS 4.2.0, который поставляется с хорошим HASingletonController, который гарантирует, что один экземпляр службы запущен в данный момент времени.
Но как только происходит сбой, вторая служба должна продолжить работу с того места, где остановилась первая.
Как я могу разделить состояние между узлами в кластере таким образом, чтобы не было возможности отправлять некоторые электронные письма дважды?
Решение
Вы могли бы использовать обмен сообщениями, чтобы отделить чтение файла от отправки почты.Попросите один процесс прочитать файл и отправить сообщения JMS, содержащие от 1 до N адресов электронной почты, и попросите MDB получать сообщения и отправлять электронные письма.Другой вариант - синхронизировать напрямую с базой данных, позволить процессу чтения вставлять адреса и статус в базу данных, а вашей службе считывать адреса из базы данных, отправлять электронные письма и обновлять статус...