1、Redis消息队列
因我们业务实现订单失效时间是可配置的,所有Rdis数据类型使用ZSet;
2、线程处理
package com.mw.web.thread;
import com.mw.web.common.utils.IdWorker;
import com.mw.web.common.utils.SpringContextUtil;
import com.mw.web.common.utils.StringUtils;
import com.mw.web.common.utils.constants.RedisKeys;
import com.mw.web.common.utils.redis.RedisUtils;
import com.mw.web.service.WeChat.WechatOrderService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
import java.util.Set;
/**
* @description: TODO 订单待支付倒计时
* @author yaohui
* @date 2021/10/11 18:19
* @version 1.0
*/
public class MyOrder extends HttpServlet{
private static final long serialVersionUID = 1L;
private MyThread1 myThread1;
private MyThread2 myThread2;
public MyOrder(){
}
@Override
public void init(){
String str = null;
if (str == null && myThread1 == null) {
myThread1 = new MyThread1();
myThread1.start(); // servlet 上下文初始化时启动 socket
}
if (str == null && myThread2 == null) {
myThread2 = new MyThread2();
myThread2.start(); // servlet 上下文初始化时启动 socket
}
}
@Override
public void doGet(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)
throws ServletException, IOException{
}
public void destory(){
if (myThread1 != null && myThread1.isInterrupted()) {
myThread1.interrupt();
}
if (myThread2 != null && myThread2.isInterrupted()) {
myThread2.interrupt();
}
}
}
/**
* 自定义一个 Class 线程类继承自线程类,重写 run() 方法,用于从后台获取并处理数据
*
* @author Champion.Wong
*
*/
class MyThread1 extends Thread {
protected final static Logger log = Logger.getLogger(String.class);
@Override
public void run() {
while (!this.isInterrupted()) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
/* ------------------ 开始执行 --------------------------- */
System.out.println("线程1");
}
}
}
/**
* 自定义一个 Class 线程类继承自线程类,重写 run() 方法,用于从后台获取并处理数据
*
* @author Champion.Wong
*
*/
class MyThread2 extends Thread {
@Autowired
private WechatOrderService wechatOrderService;
protected final static Logger log = Logger.getLogger(String.class);
@Override
public void run() {
this.wechatOrderService = SpringContextUtil.getBean(WechatOrderService.class);
while (!this.isInterrupted()) {// 线程未中断执行循环
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
/* ------------------ 开始执行 --------------------------- */
System.out.println("线程2");
}
}
}
3、redisTemplate
以上是订单相关整理。