В сценарии обработки сервлета Async я хочу добиться отмены запросов. (Am также надеется сохранить этот RESTful)Любые проблемы с этим подходом к отмене/прерыванию обработки сервлета Async
Say, у меня есть следующий код:
@RequestMapping("/quotes")
@ResponseBody
public void quotes() {
//...
final AsyncContext ac = request.startAsync();
ac.setTimeout(0);
RunJob job = new RunJob(ac);
asyncContexts.add(job);
pool.submit(job);
};
// In some other application-managed thread with a message-driven bean:
public void onMessage(Message msg) {
//...
if (notEndOfResponse) {
ServletOutputStream out = ac.getResponse().getOutputStream();
//...
out.print(message);
} else {
ac.complete();
asyncContexts.remove(ac);
}
};
Если клиент решает отменить эту обработку на стороне сервера, он должен отправить другой HTTP-запрос, который идентифицирует предыдущий запрос, и затем сервер отменяет предыдущий запрос (т.е. останавливает обработку на стороне сервера для этого запроса и завершает ответ для него).
Есть ли стандартный способ для этого? Если это так, то нет стандартного способа сделать это, и каждый разработчик делает это по своей воле и умению, я хотел бы знать, подходит ли мой (тривиальный) подход к этой проблеме. Мой путь (после @ предложение ПАСЕ) является:
- Создать «RequestID» на сервере и возвращает URL/ссылку как часть первых частичных ответов (потому что я мог бы получить много частичных ответов на один запрос как часть обработки Async).
- Связь может быть, напр: .../outstandingRequests/RequestID
- При необходимости отменить запрос, клиент делает запрос DELETE на URL, и пусть фигуру сервера, как добиться отмены в конце.
Любые проблемы с этим подходом?
Это не стандартный подход, о котором я знаю, но наша команда возвращает URL/выдающийся запросRequests/requestId, а DELETE к этому URL-адресу - это отмена, а GET возвращает статус, который включает результаты операции, когда операция завершена. (PUT и POST не поддерживаются). – Pace
+1. Имеет смысл. Infact, я редактирую свой пост, чтобы отразить ваше предложение и держать его открытым, чтобы искать дополнительные ресурсы. – brainOverflow
@Pace: Я думаю, вы ответили на вопрос. Можете ли вы опубликовать свой комментарий в качестве ответа, чтобы я мог его принять! – brainOverflow