Spring Security构建Rest服务-0500-异步处理rest服务
异步处理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服务的更多相关文章
- Spring Boot中使用 Spring Security 构建权限系统
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全 ...
- Spring Security构建Rest服务-1300-Spring Security OAuth开发APP认证框架之JWT实现单点登录
基于JWT实现SSO 在淘宝( https://www.taobao.com )上点击登录,已经跳到了 https://login.taobao.com,这是又一个服务器.只要在淘宝登录了,就能直接访 ...
- Spring Security构建Rest服务-1202-Spring Security OAuth开发APP认证框架之重构3种登录方式
SpringSecurityOAuth核心源码解析 蓝色表示接口,绿色表示类 1,TokenEndpoint 整个入口点,相当于一个controller,不同的授权模式获取token的地址都是 /oa ...
- Spring Security构建Rest服务-1001-spring social开发第三方登录之spring social基本原理
OAuth协议是一个授权协议,目的是让用户在不将服务提供商的用户名密码交给第三方应用的条件下,让第三方应用可以有权限访问用户存在服务提供商上的资源. 接着上一篇说的,在第三方应用获取到用户资源后,如果 ...
- Spring Security构建Rest服务-1201-Spring Security OAuth开发APP认证框架之实现服务提供商
实现服务提供商,就是要实现认证服务器.资源服务器. 现在做的都是app的东西,所以在app项目写代码 认证服务器: 新建 ImoocAuthenticationServerConfig 类,@Ena ...
- Spring Security构建Rest服务-1200-SpringSecurity OAuth开发APP认证框架
基于服务器Session的认证方式: 前边说的用户名密码登录.短信登录.第三方登录,都是普通的登录,是基于服务器Session保存用户信息的登录方式.登录信息都是存在服务器的session(服务器的一 ...
- Spring Security构建Rest服务-0900-rememberMe记住我
Spring security记住我基本原理: 登录的时候,请求发送给过滤器UsernamePasswordAuthenticationFilter,当该过滤器认证成功后,会调用RememberMeS ...
- Spring Security构建Rest服务-1401-权限表达式
Spring Security 的权限表达式 用法,在自定义的BrowserSecurityConfig extends WebSecurityConfigurerAdapter 配置文件里,每一个a ...
- Spring Security构建Rest服务-1205-Spring Security OAuth开发APP认证框架之Token处理
token处理之二使用JWT替换默认的token JWT(Json Web Token) 特点: 1,自包含:jwt token包含有意义的信息 spring security oauth默认生成的t ...
- Spring Security构建Rest服务-1204-Spring Security OAuth开发APP认证框架之Token处理
token处理之一基本参数配置 处理token时间.存储策略,客户端配置等 以前的都是spring security oauth默认的token生成策略,token默认在org.springframe ...
随机推荐
- hadoop 学习之异常篇
本文旨在给予自己在学习hadoop过程中遇到的问题的一个记录和解决方法. 一. copyFromLocal: java.io.IOException: File /user/hadoop/slaves ...
- HDU 2136 Largest prime factor (素数打表。。。)
题意:给你一个数,让你求它的最大因子在素数表的位置. 析:看起来挺简单的题,可是我却WA了一晚上,后来终于明白了,这个第一层循环不是到平方根, 这个题和判断素数不一样,只要明白了这一点,就很简单了. ...
- shell中$(( ))、$( )与${ }的区别
转载自:http://blog.sina.com.cn/s/blog_4da051a60102uwda.html 命令替换 在bash中,$( )与` `(反引号)都是用来作命令替换的. 命令替换与变 ...
- Android-Java-了解编译
在多年以前,计算机早期的运行方式是 01010100 ....., 这种方式的时候,开发人员编写代码是把01010101/01100101/01010111 ..... /来汇编写代码,这种方式特别痛 ...
- 【算法34】蓄水池抽样算法 (Reservoir Sampling Algorithm)
蓄水池抽样算法简介 蓄水池抽样算法随机算法的一种,用来从 N 个样本中随机选择 K 个样本,其中 N 非常大(以至于 N 个样本不能同时放入内存)或者 N 是一个未知数.其时间复杂度为 O(N),包含 ...
- Unity核心对象模型
总结的Unity引擎部分的核心对象模型类图,供大家学习时参考,根基类为Object,下一层包括核心基类GameObject,及其他作为资源的Mesh,Material,Shader,Texture,S ...
- CentOS7查看CPU个数
查看逻辑cpu个数:cat /proc/cpuinfo | grep "processor" | wc -l 查看物理cpu个数:cat /proc/cpuinfo | grep ...
- 对php和java里面的static函数和static的一些理解
static function: "static方法就是没有this的方法.在static方法里面不可以调用非静态方法,反过来是可以的.并且可以在没有创建任何对象的前提下,仅仅通过类名来调用 ...
- C# autofac配置文件中设置单例
设置instance-scope属性值为SingleInstance
- C#实现墨卡托投影坐标系经纬度与米制单位之间的互转
using System; using GeoJSON.Net.Geometry; namespace GISWebService.Common { /// <summary> /// 墨 ...