jax-rs jax-ws_在JAX-RS中处理异步请求中的超时
生活随笔
收集整理的這篇文章主要介紹了
jax-rs jax-ws_在JAX-RS中处理异步请求中的超时
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
jax-rs jax-ws
JAX-RS 2.0在客戶端和服務器端都支持異步編程范例。 這篇文章重點介紹了使用JAX-RS(2.0)API在服務器端執行異步REST請求時的超時功能
無需過多介紹,這里是一個快速概述。 為了以異步方式執行方法,您只需
- 需要指定AsyncResponse接口的實例作為方法參數之一
- 使用@Suspended批注對其進行批注( 只要 JAX-RS檢測到此批注,JAX-RS就會為您注入AsyncResponse的實例)
- 需要在不同的線程中調用請求–在Java EE 7中推薦的方法是使用托管服務執行程序
在幕后?
服務器和客戶端之間的基礎I / O連接不受影響。 但是在某些情況下,您可能不希望客戶端永遠等待響應。 在這種情況下,您可以分配超時(閾值)
超時的默認行為是HTTP 503響應。 如果要覆蓋此行為,則可以實現TimeoutHandler并將其注冊到AsyncResponse中。 如果您使用的是Java 8,則無需麻煩使用單獨的實現類甚至是匿名內部類-您只需提供Lambda表達式即可,因為TimeoutHandler是具有單個抽象方法的功能接口
@GET @Produces("text/plain") public void execute(@Suspended AsyncResponse response){System.out.println("Initially invoked on thread - "+ Thread.currentThread.getName() + ". This will free up soon !");//just having this would result in HTTP 503 after 10 secondsresponse.setTimeout(10, TimeUnit.SECONDS); //client will recieve a HTTP 408 (timeout error) after 10 secondsresponse.setTimeoutHandler((asyncResp) -> asyncResp.resume(Response.status(Response.Status.REQUEST_TIMEOUT)).build());new Thread(() -> {try {Thread.sleep(11000);} catch (InterruptedException ex) {//ignoring}}).start(); }干杯!
翻譯自: https://www.javacodegeeks.com/2015/03/handling-time-outs-in-async-requests-in-jax-rs.html
jax-rs jax-ws
總結
以上是生活随笔為你收集整理的jax-rs jax-ws_在JAX-RS中处理异步请求中的超时的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银豹收银系统小票打印设置(银豹收银系统小
- 下一篇: 计划单列市是什么意思(全国计划单列市有哪