Springboot中怎么实现高吞吐量异步处理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
成都创新互联专业为企业提供北屯网站建设、北屯做网站、北屯网站设计、北屯网站制作等企业网站建设、网页设计与制作、北屯企业网站模板建站服务,十年北屯做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
1. 新建Maven项目 async
2. pom.xml
3. AsyncStarter.java
package com.java;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class AsyncStarter { public static void main(String[] args) { SpringApplication.run(AsyncStarter.class, args); }}
4. AsyncVo.java
package com.java.vo;import org.springframework.web.context.request.async.DeferredResult;/** * 存储异步处理信息 * * @author Logen * * @param 接口输入参数 * @param
5. RequestQueue.java
package com.java.queue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;import org.springframework.stereotype.Component;import com.java.vo.AsyncVo;/** * 存放所有异步处理接口请求队列的对象,一个接口对应一个队列 * * @author Logen * */@Componentpublic class RequestQueue { /** * 处理下订单接口的队列,设置缓冲容量为50 */ private BlockingQueue
6. OrderTask.java
package com.java.task;import java.util.HashMap;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import com.java.queue.RequestQueue;import com.java.vo.AsyncVo;/** * 处理订单接口的任务,每个任务类处理一种接口 * * @author Logen * */@Componentpublic class OrderTask extends Thread { @Autowired private RequestQueue queue; private boolean running = true; @Override public void run() { while (running) { try { AsyncVo
7. QueueListener.java
package com.java.listener;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import com.java.task.OrderTask;/** * 队列监听器,初始化启动所有监听任务 * * @author Logen * */@Componentpublic class QueueListener { @Autowired private OrderTask orderTask; /** * 初始化时启动监听请求队列 */ @PostConstruct public void init() { orderTask.start(); } /** * 销毁容器时停止监听任务 */ @PreDestroy public void destory() { orderTask.setRunning(false); }}
8. OrderController.java
package com.java.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.context.request.async.DeferredResult;import com.java.queue.RequestQueue;import com.java.vo.AsyncVo;/** *
* ** * @author Logen * */@RestControllerpublic class OrderController { @Autowired private RequestQueue queue; @GetMapping("/order") public DeferredResult* * 模拟下单处理,实现高吞吐量异步处理请求 * * 1、 Controller层接口只接收请求,不进行处理,而是把请求信息放入到对应该接口的请求队列中 * 2、 该接口对应的任务类监听对应接口的请求队列,从队列中顺序取出请求信息并进行处理 * * 优点:接口几乎在收到请求的同时就已经返回,处理程序在后台异步进行处理,大大提高吞吐量 * * ** *