springmvc DeferredResult處理異步請求


DeferredResult

使用場景:類似於Callable,但相比於Callable使用更復雜的業務情況:對於一次請求,其處理結果可能是其它系統(線程)才能處理的,

在其它系統(線程)未將結果處理完放進DeferredResult中之前一直阻塞

A controller method can also return a DeferredResult (new type in Spring MVC 3.2) to complete processing in a thread not known to Spring MVC. For example reacting to a JMS or an AMQP message, a Redis notification, and so on. Here is another code snippet

示例:

@RequestMapping("/front/test_DeferredResult")
    public DeferredResult<String> testDefer() {
        //3000L超時時間,time out超時說明
        DeferredResult<String> deferredResult = new DeferredResult<String>(3000L,"time out");
        // 在其它線程給deferredResult設置處理結果后會返回給客戶端
        // 模擬隊列
        SampleQueen.add(deferredResult);
        return deferredResult;
    }
    @RequestMapping("/front/set_DeferredResult")
    public String setResult2DeferredResult() {
        DeferredResult<String> deferredResult = SampleQueen.get();
        //模擬隊列將處理結果放回
        deferredResult.setResult("test success");
        return "set test success";
    }

  在訪問/front/test_DeferredResult時會在超時范圍內等待

       在模擬其他消息處理的請求/front/set_DeferredResult將結果放回DeferredResult后,/front/test_DeferredResult會得到響應。

      //同樣DeferredResult提供超時及完成后的處理任務,視具體業務而定

     //deferredResult.onTimeout(Runnable);

    //deferredResult.onCompletion(Runnable);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM