Мне трудно понять, как спроектировать последний фрагмент моей системы. В настоящее время я использую сервер Tomcat с сервлетом, который отвечает на запросы клиентов. Каждый запрос в свою очередь добавляет сообщение обработки в асинхронную очередь (вероятно, я буду использовать JMS через Spring или, скорее всего, Amazon SQS).
Последовательность событий такая:
Сторона отправки:
1. Примите запрос клиента
2. Добавьте в БД некоторые данные, связанные с этим запросом, с уникальным идентификатором
3. Добавьте объект сообщения, представляющий этот запрос, в очередь сообщений
Принимающая сторона:
1. Извлечь новый объект сообщения из очереди
2. Разверните объект и получите некоторую информацию с веб-сайта на основе информации, содержащейся в объекте msg.
3. Отправить оповещение по электронной почте
4. обновите строку моей БД (с тем же уникальным идентификатором) информацией о том, что операция была выполнена для этого запроса.
Мне трудно понять, как правильно поступить с принимающей стороной. С одной стороны, я, вероятно, могу создать простую Java-программу, которую я запускаю из командной строки, которая выбирает каждый элемент в очереди и обрабатывает его. Это безопасно? Имеет ли смысл запускать эту программу как другой поток внутри контейнера Tomcat? Я не хочу делать это последовательно, то есть принимающая сторона должна иметь возможность обрабатывать несколько объектов одновременно, используя несколько потоков. Я хочу, чтобы это работало всегда, 24 часа в сутки.
Какие есть варианты построения принимающей стороны?