美文网首页
Spring Boot 基于WebAsync的异步服务

Spring Boot 基于WebAsync的异步服务

作者: CallMe兵哥 | 来源:发表于2019-04-01 14:55 被阅读0次

Spring Boot 基于WebAsync的异步服务在异步的web服务开发中,也是属于比较常见的模式。

  1. 在pom.xml中引入配置
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
  1. 建立Service层接口
public interface PiceaService {
    //无返回参数方法
    void task() throws Exception;
    //有返回参数方法
    String task2() throws Exception;
}
  1. 建立Service层实现
    Service层接口与实现,跟其他正常同步请求一样,没有差别。
@Service
public class PiceaServiceImpl implements PiceaService {

    @Override
    public void task() throws Exception {
        System.out.println("------------------------在看貂蝉,不要打扰--------------");
        Thread.sleep(1000);
    }

    @Override
    public String task2 () throws Exception {
        int k = 1;
        System.out.println("------------------------在看鱼,不要打扰--------------");
        Thread.sleep(1000);
        return (String.valueOf(k));
    }
}
  1. 建立Contoller层方法
    基于WebAsync的方式也可以定义超时,定义完成时调用的方法。
@RestController
public class PiceaServletContoller {

    @Autowired
    private PiceaService piceaService;

    @RequestMapping("/webAsyncTask")
    public WebAsyncTask<String> deferredResult() throws Exception {
        System.out.println("控制层执行线程:" + Thread.currentThread().getName());
        WebAsyncTask<String> result = new WebAsyncTask<String>(10 * 1000L, new Callable<String>() {
            @Override
            public String call() throws Exception {
                System.out.println("异步执行线程:" + Thread.currentThread().getName());
                String str = piceaService.task2();
                Thread.sleep(1000);
                return ("这是【异步】的请求返回: " + str);
            }
        });
        //定义超时
        result.onTimeout(new Callable<String>() {
            @Override
            public String call() throws Exception {
                System.out.println("异步线程执行超时");
                return ("线程执行超时");
            }
        });
        //定义完成,即使是超时,也会运行此方法
        result.onCompletion(new Runnable() {
            @Override
            public void run() {
                System.out.println("异步执行完毕");
            }
        });
        return result;
    }
}
  1. 测试结果及方法
    浏览器中访问http://localhost:2001/webAsyncTask测试结果。
    Spring-boot-async-webAsync.png

其它注意

本文章样例:
工程名:spring-boot-async-webasync
GitHub:https://github.com/zzyjb/SpringBootLearning

相关文章

网友评论

      本文标题:Spring Boot 基于WebAsync的异步服务

      本文链接:https://www.haomeiwen.com/subject/kpjvbqtx.html