背景
当系统中的业务存在大量的相同任务(比如发送大量邮件),并且每个任务花费的时间也比较长,前段需要较快 的响应,针对这种需求,我们可以采用消息队列进行异步通知,同时也可以采用线程池+内存队列实现异步通知,处理业务问题。
代码实现
以下采用发送邮件作为demo
邮箱实体类
@Data
public class Email implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 自增主键
*/
private Long id;
/**
* 接收人邮箱(多个逗号分开)
*/
private String receiveEmail;
/**
* 主题
*/
private String subject;
/**
* 发送内容
*/
private String content;
/**
* 模板
*/
private String template;
/**
* 发送时间
*/
private Timestamp sendTime;
}
邮件队列
public class MailQueue {
//队列大小
static final int QUEUE_MAX_SIZE = 1000;
static BlockingQueue blockingQueue = new LinkedBlockingQueue(QUEUE_MAX_SIZE);
/**
* 私有的默认构造子,保证外界无法直接实例化
*/
private MailQueue(){};
/**
* 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例
* 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载
*/
priva