在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

strspn php,php返回在字符串中包含 charlist 参数中指定的字符数目的函数strspn()

实例返回在字符串 "Hello world!" 中包含字符 "kHlleo" 的数目&#xff1a;<?php echo strspn("Hello world!","kHlleo");?>定义和用法strspn() 函数返回在字符串中包含 charlist 参数中指定的字符数目。提示&#xff1a;请使…

Java十大简单性能优化

关于“ web scale ”这个流行词有很多炒作&#xff0c;人们花了很多时间来重新组织他们的应用程序体系结构&#xff0c;以使其系统“规模化”。 但是什么是扩展&#xff0c;我们如何确保可以扩展&#xff1f; 缩放的不同方面 上面提到的炒作主要是关于扩展负载 &#xff0c;即…

C#_获取汉字拼音

using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; namespace Ctr.Common.Tools {/// <summary>/// 汉字转拼音静态类,包括功能全拼和缩写&#xff0c;方法全部是静态的/// </summary>public static cla…

php在苹果手机上传不了图片大小,ThinkPHP后台上传图片无默认尺寸解决方法

原标题&#xff1a;ThinkPHP后台上传图片无默认尺寸解决方法随着网站移动端的日益普及&#xff0c;对后台数据的兼容性要求也越来越高。后台数据涵盖范围不断扩大的同时&#xff0c;使得程序处理能力也必须逐步提高。使用ThinkPHP进行长沙网站开发时&#xff0c;后台kindeditor…

幂等与时间解耦之旅

HTTP中的幂等性意味着相同的请求可以执行多次&#xff0c;并且效果与仅执行一次一样。 如果用新资源替换某个资源的当前状态&#xff0c;则无论您执行多少次&#xff0c;最终状态都将与您仅执行一次相同。 举一个更具体的例子&#xff1a;删除用户是幂等的&#xff0c;因为无论…

开发者最容易犯的13个JavaScript错误

开发者最容易犯的JavaScript错误&#xff0c;总结出13个。这些当中可能少不了你犯的错误。我们描述了这些陋习&#xff0c;并列出来解决办法&#xff0c;希望对开发者有帮助。 1.for...数组迭代的用法 Usage of for..in to iterate Arrays 举例&#xff1a; var myArray [ “a…

php h2,微信连接失败:一直返回h2Moved/h2 (终于搞定了)

这几天都OK的&#xff0c;可以正常访问&#xff0c;统计数据上只出现过一次访问失败&#xff0c;但是平均耗时增加了30%估计是上次那个心脏滴血事件后&#xff0c;腾讯要求停用SSLv3&#xff0c;必须用TLSv1&#xff0c;但是之前一直没有停止SSLv3的支持&#xff0c;现在真停了…

使用Selenium进行Spring Boot集成测试

Web集成测试允许对Spring Boot应用程序进行集成测试&#xff0c;而无需进行任何模拟。 通过使用WebIntegrationTest和SpringApplicationConfiguration我们可以创建加载应用程序并在普通端口上侦听的测试。 Spring Boot的这一小增加使使用Selenium WebDriver创建集成测试变得更加…

begin ~~~

是时候需要用博客记录自己的code life了~~~ 大二暑假~~~ 需要的tech&#xff1a;php linux j2se ssh asp.net c#winform python htmlcssjsajax svngit转载于:https://www.cnblogs.com/tonyluj/p/3252185.html

在Spring MVC流中使用rx-java Observable

Spring MVC现在已经支持异步请求处理流程了一段时间&#xff0c;该支持内部利用了Tomcat / Jetty等容器的Servlet 3异步支持。 Spring Web Async支持 考虑一下需要花一点时间处理的服务呼叫&#xff0c;该服务呼叫具有延迟&#xff1a; public CompletableFuture<Message&…

宝塔php gd库,宝塔面板安装 EasyImag – 一款最简单图床的安装体验

近日闲逛&#xff0c;发现了一款图床&#xff0c;一款开箱即食的简单图床程序。因为没有数据库所以安装起来也是异常简单&#xff0c;我们看看功能&#xff1a;支持设置图片质量支持仅登录后上传支持QQ截图&#xff0c;剪切板上传支持在线管理(增删改查)支持上传图片转换为指定…

php order by where,无合适where条件过滤时尽量选择order by后的字段以驱动表进行查询...

后台查询语句SELECTo.orders_id,s.orders_status_name,ot.text,af.affiliate_idFROMordersoLEFTJOINorders_totalotON(o.orders_idot.orders_id)LEFTJOINaffilia后台查询语句SELECT o.orders_id, s.orders_status_name, ot.text ,af.affiliate_idFROM orders oLEFT JOIN orders…

零垃圾创建数百万个对象

如性能优化第一规则中所述&#xff0c;垃圾是快速代码的敌人。 通过使用垃圾收集器的服务&#xff0c;它不仅会破坏任何形式的确定性性能&#xff0c;而且我们开始在CPU高速缓存中填充垃圾&#xff0c;这将导致程序的高速缓存未命中。 那么&#xff0c;我们可以在不创建垃圾的…

[算法]单链表专题

如何判断链表环的入口位置&#xff1f; 一个指针从头开始单步走&#xff0c;一个指针从第一次相遇位置开始单步走&#xff0c;再相遇的位置就是环入口&#xff0c;证明如下&#xff1a; 设链表头到环入口位置距离为a&#xff0c;入口位置到第一次相遇位置为b&#xff0c;相遇位…

批准Oracle IDM中的特定Web服务

关于Web服务端点的快速发布&#xff0c;OIM和SOA在与批准有关的场景中使用了Web服务端点- 基本内容&#xff0c;但对于初学者可能有用 。 Oracle IDM与SOA套件集成并利用其提供与批准相关的功能&#xff08;说实话&#xff0c;SOA相当丰富&#xff0c;并且也被用作Web服务连接…

Oracle15001,Oracle11gR2RAC环境DBCA创建数据库报错ORA-15055ORA-15001

在Oracle 11gR2 GridInfrastructure和Database软件安装完成之后&#xff0c;执行DBCA创建数据库到30%的时候报如下错误&#xff0c;点击OK后提示忽略并问题现象:在Oracle 11gR2 GridInfrastructure和Database软件安装完成之后&#xff0c;执行DBCA创建数据库到30%的时候报如下错…

linux 下访问mysql

1&#xff1a;先进到root:/# /usr/local/mysql/bin/2&#xff1a;root:/# mysql -u root -p Enter password: 转载于:https://www.cnblogs.com/gaoyinghui/p/3255148.html

针对新手的Java EE7和Maven项目–第8部分

第1部分 &#xff0c; 第2部分 &#xff0c; 第3部分 &#xff0c; 第4部分 &#xff0c; 第5部分 &#xff0c; 第6部分 &#xff0c; 第7部分 第8部分 自上一篇文章以来&#xff0c;这一系列教程已经有很长时间了。 是时候恢复并在我们的简单项目中添加新功能了。 正…

oracle_home path,ORACLE_HOME迁移后需要设置LD_LIBRARY_PATH环境变量

而设置LD_LIBRARY_PATH后&#xff0c;问题解决&#xff1a;[orat3hpserver2 ~]$ export LD_LIBRARY_PATH$ORACLE_HOME/lib[orat3hpserver2 ~]$ sqlplus / AS sysdbaSQL*Plus: Release 10.2.0.4.0 - Production ON Sun Mar 18 16:10:57 2012Copyright (c) 1982, 2007, Oracle. A…

栈的链式存储及其基本运算

#include <stdio.h> #include <stdlib.h> #define M 10typedef struct stnode {char data;struct stnode *next; }LinkStack;void InitStack(LinkStack *&ls) //初始化栈 {lsNULL; }void PushStack(LinkStack *&ls,char x)//进栈 {LinkStack *p;p(LinkSta…