前言
在某些场景下,操作比较耗时,给用户体验不是很好,这时候我们就会直接想到两种方案,一种是定时任务,一种就是异步队列,那些实时性要求不高,且比较耗时的任务,是队列的最佳应用场景。
一、异步队列实现思路?
持久化=>插入队列=>出队,当程序突然停止,当程序启动的时候,从库里面拉出未执行的数据继续入队(补偿机制),下面是java的简单实现。
二、实现步骤
1.加入监听器
代码如下(示例):在web.xml 加入监听器
<!--转交异步处理监听器 -->
<listener>
<listener-class>context.ZjListener</listener-class>
</listener>
2.实现监听器
代码如下(示例):
public class ZjListener implements ServletContextListener {
private static Logger log = LoggerFactory.getLogger(ZjListener.class);
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
log.info("初始化转交异步处理线程...");
ZjManager.getInstance().starup();
log.info("初始化转交异步处理线程成功...");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
ZjManager.getInstance().shutdown();
}
3.实现转交处理对象和转交处理线程
代码如下(示例):我就简单示例一些,具体实现看业务昂
public class ZjRequset {
private String dm;
private String xh;
public String getDm() {
return dm;
}
public void setDm(String dm) {
this.dm = dm;
}
public String getXh() {
return xh;
}
public void setXh(String xh) {
this.xh = xh;
}
}
public class ZjThread implements Runnable{
private ZjRequset requset;
private ZjService zjService = WebAppContext.getBeanEx("ZjService")