Вопрос

В настоящее время у меня есть контейнер tomcat - сервлет, запущенный на нем для прослушивания запросов.Мне нужно, чтобы результатом HTTP-запроса была отправка в очередь заданий, которая затем будет обработана асинхронно.Я хочу, чтобы каждое "задание" сохранялось в строке базы данных для отслеживания и восстановления в случае сбоя.Я много читал в последнее время.Вот мои варианты (обратите внимание, что я должен использовать материалы с открытым исходным кодом для всего).

1) JMS - использовать ActiveMQ (но кто является потребителем задания в данном случае другого сервлета?)

2) Попросите мой запрос создать строку в базе данных.Имейте отдельный сервлет внутри моего контейнера Tomcat, который всегда запускается - он использует планировщик Quartz или утилиты, предоставляемые в java.util.concurrent, для непрерывной обработки строк в качестве заданий (использует пул потоков).

Я склоняюсь к последнему, потому что просмотр документации JMS вызывает у меня головную боль, и хотя я знаю, что это более надежное решение, мне нужно реализовать это относительно быстро.В любом случае я не ожидаю огромных объемов нагрузки в первые дни развертывания этого сервера.

Многие люди говорят, что весна может быть хороша как для 1, так и для 2.Однако я никогда не использовал Spring и даже не знаю, как начать использовать его для решения этой проблемы.Были бы полезны любые указания о том, как погрузиться в работу без необходимости переписывать весь мой проект заново.

В противном случае, если бы вы могли взвесить вариант 1 или 2, это также было бы полезно.

Разъяснение:Асинхронный процесс будет заключаться в скрининге стороннего веб-сайта и отправке уведомления о сообщении исходному отправителю запроса.Сторонний веб-сайт немного неровный и медленный, и именно поэтому он будет обрабатываться как асинхронный процесс (встроено несколько попыток повтора).Я также буду извлекать файлы с этого сайта и сохранять их в S3.

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

Решение

Ваше задание Quartz не обязательно должно быть сервлетом!Вы можете сохранять входящие задания в базе данных и запускать Quartz при запуске вашего основного сервлета.Задание Quartz может быть простым POJO и периодически проверять базу данных на наличие каких-либо заданий.

Тем не менее, я бы предложил взглянуть на Spring.Этому нетрудно научиться, и простая настройка в Tomcat.Вы можете найти много полезной информации в Справочная документация Spring.Он имеет интеграцию с Quartz, что намного проще, чем делать это вручную.

Другие советы

Подходящее решение, которое не потребует от вас много работы по проектированию и программированию, - это создать объект, который вам понадобится позже в сервлете, и сериализовать его в массив байтов.Затем поместите это в поле BLOB-объекта в базе данных и покончите с этим.

Затем ваш обрабатывающий поток может просто прочитать содержимое, десериализовать его и работать с восстановленным объектом.

Но вы можете получить лучшие ответы, описав, что на самом деле должна делать ваша система :)

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