在JAX-RS中处理异步请求中的超时
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中处理异步请求中的超时相关推荐
- php中jquery ajax请求参数,浅谈Jquery中Ajax异步请求中的async参数的作用
之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html asy.js function testAsync{ var temp; $.ajax( ...
- jax-rs jax-ws_在JAX-RS中处理异步请求中的超时
jax-rs jax-ws JAX-RS 2.0在客户端和服务器端都支持异步编程范例. 这篇文章重点介绍了使用JAX-RS(2.0)API在服务器端执行异步REST请求时的超时功能 无需过多介绍,这里 ...
- 异步请求中jetty处理ServletRequestListener的坑
标题起得比较诡异,其实并不是坑,而是jetty似乎压根就没做对异步request的ServletRequestListener的特殊处理,如果文中有错误欢迎提出,可能自己有所疏漏了. 之前遇到了一个b ...
- 解决Ajax异步请求中传数组参数,后台无法接收问题
解决Ajax异步请求中传数组参数,后台无法接收问题 参考文章: (1)解决Ajax异步请求中传数组参数,后台无法接收问题 (2)https://www.cnblogs.com/wangshuaiand ...
- 前端异步请求中后发先到的解决方案
通用的组件请求管理器,解决异步请求中的后发先到的问题 测试方法:可以使用fiddler进行测试,选择fiddler rules菜单中的automatic breakpoints中的afterRespo ...
- PHP guzzle异步请求数据,Guzzle中的异步请求
Guzzle中的异步请求 使用Guzzle发起异步请求 Guzzle是一个PHP的HTTP客户端,它在发起http请求时不仅可以同步发起,还可以异步发起. $client = new Client() ...
- java获取jsp页面参数_jsp页面中获取servlet请求中的参数方法总结
jsp页面中获取servlet请求中的参数的办法详解 在JAVA WEB应用中,如何获取servlet请求中的参数,并传递给跳转的JSP页面?例如访问http://localhost:8088/bbs ...
- react中实现异步请求的方法一,react-thunk
写在前面: 在react中,dispatch是同步执行reducers生成新状态的,对于页面的操作没有问题:但是如果点击事件是请求了某个结果,需要等待结果响应后再更新视图呢?应该如何处理?这里就用到了 ...
- @async 没有异步_扒一扒VueCLI3.0中Axios异步请求同步化
前台经常会遇到请求同步和异步的问题,今天咱们来聊一聊vue中同步请求和异步请求那些事儿. 说到接口的请求同步和异步问题,最早接触Ajax中就存在,Ajax传递的参数有一个async,默认情况下是fal ...
最新文章
- UIMenuController的简单使用
- VsCode中文乱码解决方法
- Linux的top命令
- 文献记录(part25)--ACDnet An action detection network for real-time edge computing based on flow-guided
- 2020 全球 JS 现状调查报告
- gRPC .NET Core跨平台学习
- 【面向对象】面向对象程序设计测试题7-对象之间的has-a/many关系测试题
- Go语言编程—Go语言中JSON的处理(map、struct 和 JSON字符串的相互转换)
- 笨方法“学习python笔记之文件操作
- druid报异常 “sql injection violation, part alway true condition not allow”的解决方案
- spring @Scheduled 注解实现的定时任务 3步走
- 免费会员管理管理系统
- ASP.NET 实现快递单的打印及套打
- 在职计算机培训班,计算机科学与技术在职研究生招生院校有哪些?
- java测试开发工程师,必须要明白的几处知识(附面试问题)
- 【信号与系统】(二)信号与系统概述——基本信号
- 从《数学之美》中我想到的
- 迅捷fw150服务器无响应,Fast迅捷FW150RM无线路由器Client客户端模式怎么设置
- vmware虚拟机出现此电脑无法运行win11,虚拟机中安装win11系统教程
- [python] 向量检索库Faiss使用指北