Вопрос

Наше серверное веб-приложение будет обрабатывать задания, запрашиваемые запросами REST API.

В идеале, если сервер умирает во время задания (т.е.:вилка выдернута), работа должна возобновиться или перезапуститься при запуске.

Очень удобный способ обработки этих заданий — в отдельном потоке с использованием некоторых параллельных служебных классов в Java 5.Единственная проблема заключается в том, что в случае сбоя вам необходимо записать сведения о задании и создать процесс, который считывает эти сведения при запуске и возобновляет задания.Кажется, это больно.

Альтернативный подход — использовать очередь, в которой пользователь делает запрос, мы записываем в очередь, затем читаем из очереди и выполняем задание и удаляем сообщение только после завершения задания.Это упрощает возобновление задания при запуске, поскольку сервер при запуске просто прочитает данные из очереди и возобновит процесс.

Есть ли лучшие подходы к этому сценарию?

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

Решение

Учитывая, что вы указали REST, очевидно, что у вас есть клиенты, которые отправляют запросы и требуют результатов.Почему бы не возложить бремя определения того, завершили ли они работу, на сами клиенты.

напримерклиент делает запрос.Если он получит результат, все в порядке.Однако если клиент обнаруживает, что сервер завершил работу (из-за преждевременного отключения HTTP-соединения), он может отступить и повторить попытку позже.При желании вы можете реализовать различные стратегии повторных попыток (например,повторить попытку на другом хосте, отказаться от n попыток и т. д.).

Таким образом, клиенты сохраняют знания о том, что им требуется (по-видимому, они в любом случае должны это делать), а ваши серверы не сохраняют состояние, и ими намного проще управлять.

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

Я бы использовал Кварц (который имеет функции отработки отказа) управлять своей работой.

PS: Я бы предпочел ошибаться, но, прочитав ваши последние вопросы, я чувствую, что вы создаете что-то слишком сложное или концептуально неправильное. ИМХО просто слишком много архитектурных запахов.

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