wps 呼叫方拒绝呼叫_呼叫我或异步REST

wps 呼叫方拒绝呼叫

本文是使用Spring Boot + Java 8制作的工作正常的异步REST应用程序的非常简单的示例。SpringBoot使开发Web应用程序几乎非常容易,但是为了简化任务,我从Spring存储库中举了一个例子,称为rest- service ,将其分叉到我自己的存储库中 ,并出于我的目的对其进行了更改,以创建两个应用程序:客户端和服务器。

我们的服务器应用程序将是一个简单的REST Web服务,它将查询GitHub以获取一些用户数据并将其返回。 我们的客户端应用程序还将是REST Web服务……将查询第一个应用程序!

服务器代码基本上由服务和控制器组成。 该服务使用带有@Async批注的异步方法,如下所示。

@Service
public class GitHubLookupService {private static final Logger logger = LoggerFactory.getLogger(GitHubLookupService.class);private final RestTemplate restTemplate;public GitHubLookupService(RestTemplateBuilder restTemplateBuilder) {this.restTemplate = restTemplateBuilder.build();}@AsyncCompletableFuture<User> findUser(String user) throws InterruptedException {logger.info("Looking up " + user);String url = String.format("https://api.github.com/users/%s", user);User results = restTemplate.getForObject(url, User.class);// Artificial delay of 1s for demonstration purposesThread.sleep(1000L);return CompletableFuture.completedFuture(results);}}

服务器控制器:

@RestController
public class GitHubController {private final GitHubLookupService lookupService;@Autowiredpublic GitHubController(GitHubLookupService lookupService) {this.lookupService = lookupService;}@RequestMapping("/user/{name}")public CompletableFuture<TimedResponse<User>> findUser(@PathVariable(value = "name") String name) throws InterruptedException, ExecutionException {long start = System.currentTimeMillis();ServerResponse response = new ServerResponse(Thread.currentThread().getName());return lookupService.findUser(name).thenApply(user -> {response.setData(user);response.setTimeMs(System.currentTimeMillis() - start);response.setCompletingThread(Thread.currentThread().getName());return response;});}}

我们这里拥有的是来自Java 8的简单CompletableFuture ,借助thenApply()我们将其转换为所需的格式,该格式允许我们添加有关当前线程的一些数据,以确保执行真正异步发生,也就是说,完成工作的线程不是开始工作的线程。 我们可以确定这一点,运行应用程序并检查调用结果:

marina@Marinas-MacBook-Pro:~$ http http://localhost:8080/user/mchernyavskaya
HTTP/1.1 200 
Content-Type: application/json;charset=UTF-8
Date: Mon, 02 Oct 2017 18:07:54 GMT
Transfer-Encoding: chunked{"completingThread": "SimpleAsyncTaskExecutor-1","data": {"avatar_url": "https://avatars2.githubusercontent.com/u/538843?v=4","company": "OLX","location": "Berlin, Germany","name": "Maryna Cherniavska","url": "https://api.github.com/users/mchernyavskaya"},"error": false,"startingThread": "http-nio-8080-exec-1","timeMs": 2002
}

现在,我们需要创建一个将调用服务器应用程序客户端应用 程序 。 在Spring中有一个非常方便的用于消费REST的类,称为RestTemplate 。 但是,RestTemplate是同步的,我们在服务器应用程序中进行的所有不错的异步处理对客户端应用程序完全没有帮助。 这两个应用程序是完全独立的。 客户端应用程序只知道它将处理一个相当长时间的调用。 由于客户端应用程序知道这一点,并且由于它可能不想在服务器应用程序整个查询期间都占用线程,因此我们也将使其异步。 AsyncRestTemplate即将解救!

我们的客户端应用程序将更加简单,并将主要由控制器代码组成 。 要在一台本地计算机上运行两个应用程序,我们需要使用-Dserver.port = 8082参数更改服务器的端口。 因此,我们的服务器现在位于localhost:8080上,客户端位于localhost:8082上。

客户端控制器主要如下。

@RestController
public class GitHubController {private static final String BASE_URL = "http://localhost:8080/";private final AsyncRestTemplate asyncRestTemplate = new AsyncRestTemplate();@RequestMapping("/async/user/{name}")public ListenableFuture<ClientResponse> findUserAsync(@PathVariable(value = "name") String name)throws InterruptedException, ExecutionException {long start = System.currentTimeMillis();ClientResponse clientResponse = new ClientResponse(Thread.currentThread().getName());ListenableFuture<ResponseEntity<ServerResponse>> entity = asyncRestTemplate.getForEntity(BASE_URL + name, ServerResponse.class);entity.addCallback(new ListenableFutureCallback<ResponseEntity<ServerResponse>>() {@Overridepublic void onFailure(Throwable ex) {clientResponse.setError(true);clientResponse.setCompletingThread(Thread.currentThread().getName());clientResponse.setTimeMs(System.currentTimeMillis() - start);}@Overridepublic void onSuccess(ResponseEntity<ServerResponse> result) {clientResponse.setData(result.getBody());clientResponse.setCompletingThread(Thread.currentThread().getName());clientResponse.setTimeMs(System.currentTimeMillis() - start);}});}
}

我们正在获取服务器响应,并将其包装到有关时序和当前线程的更多数据中,以更好地了解发生了什么。 AsyncRestTemplate给了我们一个ListenableFuture ,但是我们用它完成了一个CompletableFuture ,因为它允许我们手动控制将来返回的时刻,并在此过程中转换输出。

当我们调用客户服务时,它返回以下数据:

marina@Marinas-MacBook-Pro:~$ http http://localhost:8082/async/user/mchernyavskaya
HTTP/1.1 200 
Content-Type: application/json;charset=UTF-8
Date: Mon, 02 Oct 2017 18:28:36 GMT
Transfer-Encoding: chunked{"completingThread": "SimpleAsyncTaskExecutor-1","data": {"completingThread": "SimpleAsyncTaskExecutor-3","data": {"avatar_url": "https://avatars2.githubusercontent.com/u/538843?v=4","company": "OLX","location": "Berlin, Germany","name": "Maryna Cherniavska","url": "https://api.github.com/users/mchernyavskaya"},"error": false,"startingThread": "http-nio-8080-exec-7","timeMs": 1403},"error": false,"startingThread": "http-nio-8082-exec-3","timeMs": 1418
}

您可以在此处阅读有关Spring中异步方法的更多信息,但是这个简单的示例应该可以帮助您了解事物的工作方式。 完整的代码在存储库中 。 希望它有一定用处!

翻译自: https://www.javacodegeeks.com/2017/10/call-asynchronous-rest.html

wps 呼叫方拒绝呼叫

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

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

相关文章

定向输出命令_数据流的世界,带你了解Linux重定向

今天&#xff0c;小编就带大家一起来看看数据重定向。重定向&#xff1a;将原本输出到标准输出的数据重定向到一个文件中。用于终端显示输出的特殊设备&#xff1a;IO重定向是为了改变默认输入、输出的位置&#xff1a;输出重定向(标准输出STDOUT和标准错误输出STDERR)【>】…

SSH(Secure Shell) 介绍一

文章目录基本原理首次建立连接的时候的公钥交换通过ssh来进行密码登录利用公钥来登录基本原理 SSH&#xff08;Secure Shell&#xff09;是一套协议标准&#xff0c;可以用来实现两台机器之间的安全登录以及安全的数据传送&#xff0c;其保证数据安全的原理是非对称加密。 传…

影响个人计算机系统功能的因素,影响个人计算机系统功能的因素除了系统使用哪种位的微处理器外,还有CPU的时钟频率、CPU主内存容量、CPU所能提供的指令集。...

影响个人计算机系统功能的因素除了系统使用哪种位的微处理器外&#xff0c;还有CPU的时钟频率、CPU主内存容量、CPU所能提供的指令集。更多相关问题根据《空气质量恶臭的测定三点比较式臭袋法》(GB&#xff0f;T14675-1993)&#xff0c;臭气浓度是指用无臭空气对恶臭样品连续稀…

gc 堆外_GC解释:堆

gc 堆外世代垃圾收集器 JVM堆分为两个不同的世代。 一种称为“年轻”&#xff0c;第二种称为“老”&#xff08;有时称为终身制&#xff09;。 年轻一代又分为两个主要的逻辑部分&#xff1a;伊甸园和幸存者空间。 垃圾收集人员还使用了虚拟空间供年轻人和老年人使用&#xff0…

predicate 列存储索引扫描_ColumnStore index (列存储索引)解析

简介首先介紹列存储的概念&#xff1a; 传统的数据库存储是行存储。对于SQL Server来说&#xff0c;每个page是8K&#xff1b;往page里面塞数据&#xff0c;假设该表每条数据长度是500字节&#xff0c;那么这个page 先塞第一条数据&#xff0c;然后再塞第二条数据&#xff0c;大…

数据传输协议汇总

文章目录一、FTP(File Transfer Protocol 文件传输协议)&#xff08;一&#xff09;FTP 通讯端口&#xff08;二&#xff09;FTP 支持两种连接模式&#xff08;三&#xff09;缺点&#xff08;四&#xff09;FTP 命令&#xff08;五&#xff09;FTP 响应码&#xff08;六&#…

得力科学计算机怎么求余,山商“郭叔”:妙招讲高数 考研路上得力导师

山东工商学院数学与信息科学学院教授郭林大众网海报新闻记者 屈晨晨 烟台报道“郭老师人特别和蔼&#xff0c;能够和学生们打成一片&#xff0c;不仅讲课风趣&#xff0c;同时也给予了我们很多帮助&#xff0c;私底下我们都喊他郭叔。”这是山东工商学院很多毕业生对郭老师的评…

如何打开笔记本电脑的摄像头_Win8系统笔记本电脑摄像头无法使用的解决办法...

Win8系统电脑摄像头不能用怎么办&#xff1f;使用Win8系统笔记本电脑的用户反映&#xff0c;电脑摄像头无法使用了&#xff0c;这是怎么回事呢&#xff1f;如何解决这个问题&#xff1f;请看下文。解决方法&#xff1a;1、打开计算机中的“控制面板”&#xff0c;如图所示&…

浅析文件传输协议 (ftp) 的工作原理

起初&#xff0c;FTP并不是应用于IP网络上的协议&#xff0c;而是ARPANEt网络中计算机间的文件传输协议&#xff0c; ARPANET是美国国防部组建的老网络&#xff0c;于1960-1980年使用。在那时&#xff0c; FTP的主要功能是在主机间高速可靠地传输文件。目前FTP仍然保持其可靠性…

io流,装饰者模式_流与装饰器

io流,装饰者模式几年前&#xff0c; Streams API随lambda表达式一起在Java 8中引入。 作为一名训练有素的Java专家&#xff0c;我尝试在我的一些项目中使用此新功能&#xff0c;例如here和here 。 我真的不喜欢它&#xff0c;然后又回到了好的老房子里。 此外&#xff0c;我创建…

海湾汉字编码表全部_汉字编码简明对照表

汉字编码简明对照表说明&#xff1a;1、下列汉字取自国标(GB 2312-80)中的分级与排列内容&#xff1b;包含所有的第一级汉字和第二级汉字中的常用部分。2、第一级汉字(16—55区的汉字)以拼音字母为序进行排列&#xff0c;同音字以笔形顺序横、竖、撇、捺、折为序&#xff0c;起…

现代计算机教室布置图片,高中教室布置设计图

A&#xff1a;买几盆花要容易活的比如仙人球就不错还有买几张白纸布置一下学习园地在上面贴些作文*等可以*出不错的氛围办个比较好的黑板报&#xff0c;如果有兴趣可以做一些墙报。在教室的前面可以贴一些学有些教室布置是布置了&#xff0c;但很不理想&#xff1a;有的贴挂得五…

vb.net 同时给多个属性赋值_Python尚学堂高淇|1721时间表示unix时间点毫秒微秒time模块浮点数自动转换强制转换增强赋值运算符...

017浮点数-自动转换-强制转换-增强赋值运算符浮点数称为float用a*b^10形式表示的科学计数法&#xff0c;比如:3.14,314E-2或者314e-2这些数字在内存当中也是按照科学计数法存储、>>>float(3)3>>>314E-23.14>>>float(“3.14”)3.14>>>int(3…

计算机键盘复制键是哪个,键盘按什么键复制粘贴_键盘上复制粘贴快捷键是哪个键-win7之家...

使用电脑的时候经常会需要使用到复制粘贴功能&#xff0c;许多用户可能会习惯使用右键来复制粘贴&#xff0c;其实这样有点麻烦&#xff0c;比较简单的就是使用快捷键来操作&#xff0c;但是有部分用户还不知道键盘按什么键复制粘贴&#xff0c;如果你也有一样需求的话&#xf…

junit5和junit4_JUnit 5 –基础

junit5和junit4JUnit 5是适用于Java的下一代单元测试框架&#xff0c;具有许多有趣的功能&#xff0c;包括嵌套测试&#xff0c;参数化测试&#xff0c;新的扩展API或Java 8支持。 本文展示了JUnit 5的基本概念&#xff0c;包括测试生命周期&#xff0c;参数注入和声明&#x…

我的世界java无法安装包_手把手教你搭建java环境

前文由于一些历史原因,开发java程序需要技术人员自行搭建环境,而搭建环境对于新手来说并不友好,不像其他语言那般方便,现如今,为帮助想入门java却无法顺利搭建的同学,编写该教程,如果觉得本文有用,请添加关注,更多java教程,后续更新~第一步 下载JDK可自行前往Oracle官网下载指定…

FTP协议安全分析

文章目录前 言第一章 FTP协议一、协议简介二、数据表示&#xff08;一&#xff09;文件类型&#xff08;二&#xff09;格式控制&#xff08;三&#xff09;结构&#xff08;四&#xff09;传输方式三、FTP命令四、FTP应答五、连接管理第二章 安全隐患一、FTP服务器软件漏洞二、…

vs 2019 社区版许可证过期_Switch版《最终幻想12:黄道时代》对比PS4版 就没差

2017年7月发布的“最终幻想12”重制版《最终幻想12&#xff1a;黄道时代》登陆PS4平台&#xff0c;4月30日这款经典游戏还将登陆Xbox One和Switch平台&#xff0c;都将支持60帧运行。那么游戏在Switch这款掌机上的表现到底如何呢&#xff1f;油管频道Direct-Feed Games就为大家…

四川大学金融转计算机,[请教]川大和西财哪个金融系好?!

西郊网友们学学&#xff1a;看到别人学校比自己母校强心里不舒服怎么办&#xff1f;大洋之岸(1qaz2wsx33edc)其实这里很多人可能都有过这样的体验&#xff1a;当其它学校获得成绩的时候&#xff0c;当其它学校比自己母校进步更快的时候&#xff0c;心里免不了有点酸溜溜的感觉&…

MacBook/MacOS/Mac OS 查看进程/端口信息的相关命令

文章目录使用命令 lsof 查看某个端口的使用情况使用命令 netstat 查看某个端口的使用情况使用命令 ps 查看指定进程的信息&#xff08;一&#xff09;命令&#xff1a;ps auwx | grep sshd&#xff08;二&#xff09;命令&#xff1a;ps -ef | grep ssh&#xff08;三&#xff…