目录
写在文章开头
日常开发后端接口时,总是会遇到一些和业务关联性不是很大却又很耗时的操作,由于功能的重要性和体量远达不到要上消息中间件的情况,这时候我们就可以实现一个简单的生产者消费者模型来实现异步消费。就以笔者这篇文章为例,通过「JUC」包下的阻塞队列实现了一个简单的并发同步模型。
本文整体结构如下,通过笔者的代码示例,你会对生产者消费者这种并发同步的设计模式的开发模型和使用场景有着更进一步的理解。
设计思路
简单来说生产者消费者模型就是让多线程去异步消费生产者的任务,对于「web开发而言」,我们的生产者可以是任意的「HTTP」请求,这些「HTTP」请求会将一些耗时操作提交到队列中让消费者进行消费(这里消费者可以是一个异步的线程或者线程池,具体看读者的业务场景) 所以我们的实现思路如下:
-
封装一个任务,将用户的耗时操作封装到该任务中。
-
声明一个队列,存储Web请求中的耗时操作。
-
将web接口中的耗时操作提交到队列中。
-
创建一个线程池,异步消费队列中的任务。
实践
任务封装
这里笔者假设耗时的操作是对一个第三方接口的请求,所以笔者在封装任务时,只需在任务中声明调第三方接口的参数即可:
/**
* 要被执行的任务
*/
@Data
public class Task {
/**
* 任务id
*/
private Long id;
/**
* 任务名称
*/
private String taskName;
/**
* 请求参数
*/
private JSONObject params;
/**
* 创建时间
*/
private DateTime createTime;
/**
* 结束时间
*/
private DateTime finishTime;
}