2015-09-28 127 views
0

我的操作花費30分鐘到由靜止呼叫請求而被調用進程。我想給客戶立即迴應,告訴正在進行的操作,並且處理應該發生在另一個線程中,解決這個問題的最好方法是什麼,推遲結果是唯一的方法。長輪詢

+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. 您可以顯示過程每次與過程的隊列中的ID的狀態。