异步处理REST服务:

  1,使用Runnable异步处理Rest服务

  2,使用DeferredResult异步处理Rest服务

  3,异步处理配置

异步处理能提高服务器的吞吐量。

一、使用Runnable异步处理Rest服务

模拟下单:

package com.imooc.web.asyn;

import java.util.concurrent.Callable;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; /**
*
* ClassName: AsynController
* @Description: TODO
* @author lihaoyang
* @date 2018年2月27日
*/
@RestController
public class AsynController { private Logger logger = LoggerFactory.getLogger(getClass()); @RequestMapping("/order")
public Callable<String> order() throws Exception{
System.err.println("-------进入AsynController------");
logger.info("主线程开始");
Callable<String> result = new Callable<String>() { @Override
public String call() throws Exception {
logger.info("++ 副线程开始");
Thread.sleep(1000);
logger.info("++ 副线程返回");
return "success";
}
};
logger.info("主线程返回");
return result;
} }

日志:

2018-02-27 14:47:22.473 INFO 584 --- [nio-8080-exec-1] com.imooc.web.asyn.AsynController : 主线程开始
-------进入AsynController------
2018-02-27 14:47:22.473 INFO 584 --- [nio-8080-exec-1] com.imooc.web.asyn.AsynController : 主线程返回
2018-02-27 14:47:22.479 INFO 584 --- [ MvcAsync1] com.imooc.web.asyn.AsynController : ++ 副线程开始
2018-02-27 14:47:23.479 INFO 584 --- [ MvcAsync1] com.imooc.web.asyn.AsynController : ++ 副线程返回

可以看到,主线程立刻就返回了,任务由副线程去执行了,这1秒期间主线程(tomcat)可以去处理其他http请求,因此可以提高服务器吞吐量。

这种情况也是有限制的,副线程必须是由主线程调起的,副线程代码是写在主线程里的。实际场景可能用到的要比这个复杂:

模拟下单

1,服务器1 的 线程1 接收下单请求,接收到下单请求后,放在了消息队列,

2,服务器2监听消息队列,有下单请求后处理下单,下单完成后,处理结果又放在了消息队列

3,服务器1的 线程2 监听下单结果,有下单完成消息,返回给http

此时线程1和线程2不在一块,是隔离的,谁也不知道对方的存在,就没办法用Runnable了,此时就需要用DeferredResult来处理。

Spring Security构建Rest服务-0500-异步处理rest服务的更多相关文章

  1. Spring Boot中使用 Spring Security 构建权限系统

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全 ...

  2. Spring Security构建Rest服务-1300-Spring Security OAuth开发APP认证框架之JWT实现单点登录

    基于JWT实现SSO 在淘宝( https://www.taobao.com )上点击登录,已经跳到了 https://login.taobao.com,这是又一个服务器.只要在淘宝登录了,就能直接访 ...

  3. Spring Security构建Rest服务-1202-Spring Security OAuth开发APP认证框架之重构3种登录方式

    SpringSecurityOAuth核心源码解析 蓝色表示接口,绿色表示类 1,TokenEndpoint 整个入口点,相当于一个controller,不同的授权模式获取token的地址都是 /oa ...

  4. Spring Security构建Rest服务-1001-spring social开发第三方登录之spring social基本原理

    OAuth协议是一个授权协议,目的是让用户在不将服务提供商的用户名密码交给第三方应用的条件下,让第三方应用可以有权限访问用户存在服务提供商上的资源. 接着上一篇说的,在第三方应用获取到用户资源后,如果 ...

  5. Spring Security构建Rest服务-1201-Spring Security OAuth开发APP认证框架之实现服务提供商

    实现服务提供商,就是要实现认证服务器.资源服务器. 现在做的都是app的东西,所以在app项目写代码  认证服务器: 新建 ImoocAuthenticationServerConfig 类,@Ena ...

  6. Spring Security构建Rest服务-1200-SpringSecurity OAuth开发APP认证框架

    基于服务器Session的认证方式: 前边说的用户名密码登录.短信登录.第三方登录,都是普通的登录,是基于服务器Session保存用户信息的登录方式.登录信息都是存在服务器的session(服务器的一 ...

  7. Spring Security构建Rest服务-0900-rememberMe记住我

    Spring security记住我基本原理: 登录的时候,请求发送给过滤器UsernamePasswordAuthenticationFilter,当该过滤器认证成功后,会调用RememberMeS ...

  8. Spring Security构建Rest服务-1401-权限表达式

    Spring Security 的权限表达式 用法,在自定义的BrowserSecurityConfig extends WebSecurityConfigurerAdapter 配置文件里,每一个a ...

  9. Spring Security构建Rest服务-1205-Spring Security OAuth开发APP认证框架之Token处理

    token处理之二使用JWT替换默认的token JWT(Json Web Token) 特点: 1,自包含:jwt token包含有意义的信息 spring security oauth默认生成的t ...

  10. Spring Security构建Rest服务-1204-Spring Security OAuth开发APP认证框架之Token处理

    token处理之一基本参数配置 处理token时间.存储策略,客户端配置等 以前的都是spring security oauth默认的token生成策略,token默认在org.springframe ...

随机推荐

  1. Linux命令:sed

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

  2. Yarn application has already exited with state FINISHED

    如果在运行spark-sql时遇到如下这样的错误,可能是因为yarn-site.xml中的配置项yarn.nodemanager.vmem-pmem-ratio值偏小,它的默认值为2.1,可以尝试改大 ...

  3. 如何使用C++11实现C#属性概念设计

    目录(原创博客,版权所有,转载请注明出处 http://www.cnblogs.com/feng-sc) 1.概述 2.C#属性的概念  2.1.简单示例代码介绍C#中的属性  2.2.C++实现效果 ...

  4. github/gitlab添加多个ssh key

    系统:macOS X 由于公司的代码管理放在了gitlab.com上,所以添加了一个ssh key, 生成ssh key的代码如下: 1.$ ssh-keygen -t rsa -C “yourema ...

  5. eclipse 安装

    做一个项目,需要搭建环境.使用sql server 2005,tomcat,eclipse.过程真复杂,碰到些小问题,不过都解决了,还算顺利. win7下sql server 2005安装:http: ...

  6. NERDTree基本使用教程

    Vim插件之属性目录NERDTree   1.下载安装 下载地址: 官网:http://www.vim.org/scripts/script.php?script_id=1658 GitHib:htt ...

  7. [翻译]第一天 - 在 Windows 下安装和运行 .NET Core

    原文: http://michaelcrump.net/getting-started-with-aspnetcore/ 免责声明:我不是 .NET Core 开发团队的一员,并且使用的是公开.可用的 ...

  8. Unity Shader序列帧动画学习笔记

    Unity Shader序列帧动画学习笔记 关于无限播放序列帧动画的一点问题 在学shader的序列帧动画时,书上写了这样一段代码: fixed4 frag(v2f i){ // 获得整数时间 flo ...

  9. c#中在函数后紧跟=>,几个意思,差点懵逼到没有朋友!

    以下是一段新建.net core web中的代码: namespace TempCoreApp { public class Program { public static void Main(str ...

  10. 网易郑栋:数据采集与分析的那些事——从数据埋点到AB测试

    本文由  网易云发布. 4月8日晚,DTalk邀请到了网易互联网分析产品.可视化 BI 产品的负责人—郑栋老师,进行了一次关于<网易郑栋:数据采集与分析的那些事第一弹: 数据篇>的主题分享 ...