2015-09-28 2 views
0

Моя операция занимает 30 минут для обработки, которая вызывается запросом на вызов для отдыха. Я хочу дать клиенту немедленный ответ, который говорит, что операция продолжается, и обработка должна произойти в другом потоке, что является лучшим способом взломать это. Является ли отсроченный результат единственным способом.Длинный опрос весной mvc (асинхронный)

+0

Spring 4.2 поддерживает события, отправленные сервером http://zjhzxhz.com/2015/06/use-server-sent-event-in-spring-4-2/ –

ответ

0

30 минут - это долгое время. Я предлагаю вам использовать websocket s для обновления обновлений и состояния работы.

0

Поскольку вы предоставляете услуги отдыха, другой подход может заключаться в немедленном возврате клиенту «Принято» (202) или «Создано» (201) и предоставить ссылку на другую услугу, которая будет предоставлять обновления о состоянии выполнения обработки. Таким образом, клиент может решить, следует ли опросить сервер на наличие обновлений или просто предоставить пользователю кнопку «статус обновления».

0

Используйте очередь сообщений (ActiveMQ, Redis).

  1. Отправить запрос от клиента.
  2. Контроллер получает запрос, отправляет процесс/сообщение в очереди сообщений.
  3. Наверх Отказ от ответа клиенту, говорящий о его обработке.
  4. Другой поток для поиска изменений/нового процесса в очереди сообщений.
  5. Выполнение процесса - обновить статус в очереди сообщений, каждый шаг завершен. - (запущен/запущен/завершен/сбой).
  6. Вы можете отображать статус процесса каждый раз с идентификатором процесса в очереди.
Смежные вопросы