使用Spring AsyncRestTemplate对象进行异步请求调用

直接上代码:

package com.mlxs.common.server.asyncrest;

import org.apache.log4j.Logger;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.util.concurrent.ListenableFutureCallback;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.client.AsyncRestTemplate;
import org.springframework.web.client.RestTemplate;

/**
 * Asyncrest: AsyncRestTemplate 异步发生请求测试
 *
 * @author mlxs
 * @since 2016/8/4
 */
@Controller
@RequestMapping("/async")
public class AsyncrestController {
    Logger logger = Logger.getLogger(AsyncrestController.class);

    @RequestMapping("/fivetime")
    @ResponseBody
    public String tenTime(){
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "5秒...";
    }

    /**
     * 同步调用
     * @return
     */
    @RequestMapping("/sync")
    @ResponseBody
    public String sync(){
        //同步调用
        RestTemplate template = new RestTemplate();
        String url = "http://localhost:8080/async/fivetime";//休眠5秒的服务
        String forObject = template.getForObject(url, String.class);
        return "同步调用结束, 结果:" + forObject;
    }

    /**
     * 异步调用
     * @return
     */
    @RequestMapping("/async")
    @ResponseBody
    public String async(){
        AsyncRestTemplate template = new AsyncRestTemplate();
        String url = "http://localhost:8080/async/fivetime";//休眠5秒的服务
        //调用完后立即返回(没有阻塞)
        ListenableFuture<ResponseEntity<String>> forEntity = template.getForEntity(url, String.class);
        //异步调用后的回调函数
        forEntity.addCallback(new ListenableFutureCallback<ResponseEntity<String>>() {
            //调用失败
            @Override
            public void onFailure(Throwable ex) {
                logger.error("=====rest response faliure======");
            }
            //调用成功
            @Override
            public void onSuccess(ResponseEntity<String> result) {
                logger.info("--->async rest response success----, result = "+result.getBody());
            }
        });
        return "异步调用结束";
    }

}

同步请求:

异步请求:

时间: 2024-08-09 19:50:47

使用Spring AsyncRestTemplate对象进行异步请求调用的相关文章

异步请求

1.什么是? 原理性. $.ajax({               ----jQuery中封装好的异步请求 type:"post", url:"add.do", cache:"false", dataType:"json", success:function(msg){ //请求成功后执行的语句. } }); 没有封装的情况下的异步请求. ajax=异步(asynchronours) 的  javaScript and  x

SpringBoot中异步请求和异步调用(看这一篇就够了)

一.SpringBoot中异步请求的使用 1.异步请求与同步请求 特点: 可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在耗时处理完成(例如长时间的运算)时再对客户端进行响应.一句话:增加了服务器对客户端请求的吞吐量(实际生产上我们用的比较少,如果并发请求量很大的情况下,我们会通过nginx把请求负载到集群服务的各个节点上来分摊请求压力,当然还可以通过消息队列来做请求的缓冲). 2.异步请求的实现 方式一:Servlet方式实现异步请求

调用enqueue执行异步请求有一个参数设置回调。

前面的内容介绍了OkHttp,本章就来教大家okhttp的基本使用,学了这些基本东西之后,大家有其他的需求可以自行扩展.以下的所有请求都是异步请求服务器,在真实的企业开发中,基本都是异步. 首先创建一个request对象,通过request设置请求url,通过这个类还可以设置更多的请求信息.然后通过Request去构造一个Call对象. 调用enqueue执行异步请求,有一个参数设置回调.请求成功或者失败会调用Callback接口的onResponse跟onFailure方法,因为这是异步请求,

Ajax异步请求XMLHttpRequest对象Get请求

$(function () { $("#btnGetDate").click(function () { var xhr; //第一步:创建异步请求的核心的对象: if (XMLHttpRequest) { xhr = new XMLHttpRequest(); //运行:is8,ie9,chrom,ff } else {//ie6 ie5.x xhr = new ActiveXObject("Microsoft.XMLHTTP"); } //第二步:设置请求对象跟

java编程(2)——servlet和Ajax异步请求的接口编程(有调用数据库的数据)

第一步: 1.为项目配置 Tomcat 为 server: 2.导入 mysql的jar包 到项目目录中: 第二步:编码 1.数据库连接类ConnectMysql.java代码: 1 package com.testing.mysql; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 6 public class ConnectMysql { 7 //设置连接的成员变量 8 public Connection

spring mvc对异步请求的处理

在spring mvc3.2及以上版本增加了对请求的异步处理,是在servlet3的基础上进行封装的. 1.修改web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001

AngularJS 中 异步请求$http 对象的使用

 AngularJS 提供了一个类似jquery的$.ajax的对象,用于异步请求. 在AngularJS中对异步操作是推崇至极的,所以$http的操作都是异步的不像jquery.ajax里还提供了async参数. 对于官网的$http对象的总结和使用. 用法: $http(config); 参数: config (常用的参数标红,翻译了一下) config object Object describing the request to be made and how it should b

【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回

作者:ssslinppp      时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MVC与json参考文章:[spring学习笔记-mvc-3]返回json数据-方式1  和 [spring学习笔记-mvc-4]返回json数据-方式2. 使用到的技术主要如下: Ajax:使用JQuery 提供的ajax:==>需要引入jquery.min.js文件: Spring MVC: Jso

java编程——servlet和Ajax异步请求的接口编程(没有调用数据库的数据)

编程应用背景: 使用HttpServlet接口来编写一个动态登录的接口(需要在Tomcat容器发布) 登录的 LoginSample 类代码: 1 package com.zhang.java; 2 3 public class LoginSample { 4 public LoginSample() { //构造方法 5 // System.out.println("构造方法被调用!"); 6 } 7 8 public boolean login(String ln, String