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