JAX-RS 2.0在客户端和服务器端都支持异步编程范例。 这篇文章重点介绍了使用JAX-RS(2.0)API在服务器端执行异步REST请求时的超时功能

无需过多介绍,这里是一个快速概述。 为了以异步方式执行方法,您只需

  • 需要指定AsyncResponse接口的实例作为方法参数之一
  • 使用@Suspended批注对其进行批注( 只要 JAX-RS检测到此批注,JAX-RS就会为您注入AsyncResponse的实例)
  • 需要在不同的线程中调用请求–在Java EE 7中推荐的方法是使用托管服务执行程序
@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 !");new Thread(){@Overridepublic void run(){response.resume("executed asynchronously on thread - "+ Thread.currentThread.getName());}}.start();
}//JDK 8 version - passing a Runnable (in form of a Lambda Expression) to a thread@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 !");new Thread(() -> response.resume("executed asynchronously on thread - "+ Thread.currentThread().getName())).start();
}

在幕后?

服务器和客户端之间的基础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中处理异步请求中的超时相关推荐

  1. php中jquery ajax请求参数,浅谈Jquery中Ajax异步请求中的async参数的作用

    之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html asy.js function testAsync{ var temp; $.ajax( ...

  2. jax-rs jax-ws_在JAX-RS中处理异步请求中的超时

    jax-rs jax-ws JAX-RS 2.0在客户端和服务器端都支持异步编程范例. 这篇文章重点介绍了使用JAX-RS(2.0)API在服务器端执行异步REST请求时的超时功能 无需过多介绍,这里 ...

  3. 异步请求中jetty处理ServletRequestListener的坑

    标题起得比较诡异,其实并不是坑,而是jetty似乎压根就没做对异步request的ServletRequestListener的特殊处理,如果文中有错误欢迎提出,可能自己有所疏漏了. 之前遇到了一个b ...

  4. 解决Ajax异步请求中传数组参数,后台无法接收问题

    解决Ajax异步请求中传数组参数,后台无法接收问题 参考文章: (1)解决Ajax异步请求中传数组参数,后台无法接收问题 (2)https://www.cnblogs.com/wangshuaiand ...

  5. 前端异步请求中后发先到的解决方案

    通用的组件请求管理器,解决异步请求中的后发先到的问题 测试方法:可以使用fiddler进行测试,选择fiddler rules菜单中的automatic breakpoints中的afterRespo ...

  6. PHP guzzle异步请求数据,Guzzle中的异步请求

    Guzzle中的异步请求 使用Guzzle发起异步请求 Guzzle是一个PHP的HTTP客户端,它在发起http请求时不仅可以同步发起,还可以异步发起. $client = new Client() ...

  7. java获取jsp页面参数_jsp页面中获取servlet请求中的参数方法总结

    jsp页面中获取servlet请求中的参数的办法详解 在JAVA WEB应用中,如何获取servlet请求中的参数,并传递给跳转的JSP页面?例如访问http://localhost:8088/bbs ...

  8. react中实现异步请求的方法一,react-thunk

    写在前面: 在react中,dispatch是同步执行reducers生成新状态的,对于页面的操作没有问题:但是如果点击事件是请求了某个结果,需要等待结果响应后再更新视图呢?应该如何处理?这里就用到了 ...

  9. @async 没有异步_扒一扒VueCLI3.0中Axios异步请求同步化

    前台经常会遇到请求同步和异步的问题,今天咱们来聊一聊vue中同步请求和异步请求那些事儿. 说到接口的请求同步和异步问题,最早接触Ajax中就存在,Ajax传递的参数有一个async,默认情况下是fal ...

最新文章

  1. UIMenuController的简单使用
  2. VsCode中文乱码解决方法
  3. Linux的top命令
  4. 文献记录(part25)--ACDnet An action detection network for real-time edge computing based on flow-guided
  5. 2020 全球 JS 现状调查报告
  6. gRPC .NET Core跨平台学习
  7. 【面向对象】面向对象程序设计测试题7-对象之间的has-a/many关系测试题
  8. Go语言编程—Go语言中JSON的处理(map、struct 和 JSON字符串的相互转换)
  9. 笨方法“学习python笔记之文件操作
  10. druid报异常 “sql injection violation, part alway true condition not allow”的解决方案
  11. spring @Scheduled 注解实现的定时任务 3步走
  12. 免费会员管理管理系统
  13. ASP.NET 实现快递单的打印及套打
  14. 在职计算机培训班,计算机科学与技术在职研究生招生院校有哪些?
  15. java测试开发工程师,必须要明白的几处知识(附面试问题)
  16. 【信号与系统】(二)信号与系统概述——基本信号
  17. 从《数学之美》中我想到的
  18. 迅捷fw150服务器无响应,Fast迅捷FW150RM无线路由器Client客户端模式怎么设置
  19. vmware虚拟机出现此电脑无法运行win11,虚拟机中安装win11系统教程
  20. [python] 向量检索库Faiss使用指北

热门文章

  1. 《四世同堂》金句摘抄(二)
  2. 当当网头部和尾部——CSS源码
  3. FastDFS(分布式文件系统)
  4. JS中用构造函数创建对象
  5. win10关闭“Windows安全中心”功能的两种方法
  6. k8s往secret里导入证书_K8S之Secret
  7. spring boot actuator 入门荔枝
  8. 牛客网JAVA专项联系共899题--个人记录学习经历
  9. tf.metrics._将指标标签与MicroProfile Metrics 2.0一起使用
  10. lucene学习笔记_学习Lucene