延时任务从common移到放到api模块,否则后端启动报错

This commit is contained in:
xuwenbo
2019-12-08 20:02:00 +08:00
parent 10bde2ceda
commit fcf79ddda7
5 changed files with 110 additions and 125 deletions

View File

@ -1,10 +1,7 @@
package co.yixiang.modules.order.service.impl; package co.yixiang.modules.order.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.*; import cn.hutool.core.util.*;
import co.yixiang.common.constant.CacheKey;
import co.yixiang.common.constant.CommonConstant; import co.yixiang.common.constant.CommonConstant;
import co.yixiang.exception.ErrorRequestException; import co.yixiang.exception.ErrorRequestException;
import co.yixiang.modules.activity.service.YxStoreCombinationService; import co.yixiang.modules.activity.service.YxStoreCombinationService;
@ -40,17 +37,13 @@ import co.yixiang.modules.shop.service.YxStoreProductService;
import co.yixiang.modules.shop.service.YxSystemConfigService; import co.yixiang.modules.shop.service.YxSystemConfigService;
import co.yixiang.modules.shop.web.vo.YxStoreCartQueryVo; import co.yixiang.modules.shop.web.vo.YxStoreCartQueryVo;
//import co.yixiang.modules.task.CancelOrderService; //import co.yixiang.modules.task.CancelOrderService;
import co.yixiang.modules.task.CancelOrderService;
import co.yixiang.modules.user.entity.*; import co.yixiang.modules.user.entity.*;
import co.yixiang.modules.user.mapper.YxUserMapper;
import co.yixiang.modules.user.service.*; import co.yixiang.modules.user.service.*;
import co.yixiang.modules.user.web.controller.UserAddressController;
import co.yixiang.modules.user.web.vo.YxUserAddressQueryVo; import co.yixiang.modules.user.web.vo.YxUserAddressQueryVo;
import co.yixiang.modules.user.web.vo.YxUserQueryVo; import co.yixiang.modules.user.web.vo.YxUserQueryVo;
import co.yixiang.modules.user.web.vo.YxWechatUserQueryVo;
//import co.yixiang.redisson.DelayJob; //import co.yixiang.redisson.DelayJob;
//import co.yixiang.redisson.DelayJobService; //import co.yixiang.redisson.DelayJobService;
import co.yixiang.redisson.DelayJobService; import co.yixiang.modules.task.DelayJobService;
import co.yixiang.utils.OrderUtil; import co.yixiang.utils.OrderUtil;
import co.yixiang.utils.RedisUtil; import co.yixiang.utils.RedisUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
@ -67,8 +60,6 @@ import lombok.extern.slf4j.Slf4j;
//import org.redisson.api.RQueue; //import org.redisson.api.RQueue;
//import org.redisson.api.RedissonClient; //import org.redisson.api.RedissonClient;
//import org.apache.webservice.config.annotation.Service; //import org.apache.webservice.config.annotation.Service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -77,13 +68,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import javax.jws.WebService;
import java.io.Serializable; import java.io.Serializable;
import java.lang.reflect.Array;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
/** /**

View File

@ -3,7 +3,6 @@ package co.yixiang.modules.task;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import co.yixiang.modules.order.entity.YxStoreOrder; import co.yixiang.modules.order.entity.YxStoreOrder;
import co.yixiang.modules.order.service.YxStoreOrderService; import co.yixiang.modules.order.service.YxStoreOrderService;
import co.yixiang.redisson.ExecuteJob;
import co.yixiang.utils.BeanUtil; import co.yixiang.utils.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@ -1,34 +1,33 @@
package co.yixiang.redisson; package co.yixiang.modules.task;
import org.redisson.api.RBlockingQueue; import org.redisson.api.RDelayedQueue;
import org.redisson.api.RDelayedQueue; import org.redisson.api.RQueue;
import org.redisson.api.RQueue; import org.redisson.api.RedissonClient;
import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.Map; import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeUnit;
/**
/** * Created by kl on 2018/7/20.
* Created by kl on 2018/7/20. * Content :订单延时job服务
* Content :订单延时job服务 */
*/ @Component
@Component public class DelayJobService {
public class DelayJobService {
@Autowired
@Autowired private RedissonClient client;
private RedissonClient client;
/**
/** * 添加超时任务到redis队列
* 添加超时任务到redis队列 * @param job 任务
* @param job 任务 * @param delay 超时时间
* @param delay 超时时间 */
*/ public void submitJob(Map<String,Object> job, Long delay){
public void submitJob(Map<String,Object> job, Long delay){ RQueue<Map<String,Object>> blockingQueue = client.getQueue(JobTimer.CUSTOMER_JOB_TIMER_JOBS);
RQueue<Map<String,Object>> blockingQueue = client.getQueue(JobTimer.CUSTOMER_JOB_TIMER_JOBS); RDelayedQueue<Map<String,Object>> delayedQueue = client.getDelayedQueue(blockingQueue);
RDelayedQueue<Map<String,Object>> delayedQueue = client.getDelayedQueue(blockingQueue); delayedQueue.offer(job,delay,TimeUnit.MILLISECONDS);
delayedQueue.offer(job,delay,TimeUnit.MILLISECONDS); delayedQueue.destroy();
delayedQueue.destroy(); }
} }
}

View File

@ -1,12 +1,12 @@
package co.yixiang.redisson; package co.yixiang.modules.task;
import java.util.Map; import java.util.Map;
/** /**
* Created by kl on 2018/7/20. * Created by kl on 2018/7/20.
* Content :延时job执行器接口 * Content :延时job执行器接口
*/ */
public interface ExecuteJob { public interface ExecuteJob {
void execute(Map<String,Object> job); void execute(Map<String,Object> job);
} }

View File

@ -1,64 +1,64 @@
package co.yixiang.redisson; package co.yixiang.modules.task;
import org.redisson.api.RBlockingQueue; import org.redisson.api.RBlockingQueue;
import org.redisson.api.RDelayedQueue; import org.redisson.api.RDelayedQueue;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
* 消费已经到点的延时job服务通过job参数调用业务执行器实现 * 消费已经到点的延时job服务通过job参数调用业务执行器实现
*/ */
@Component @Component
public class JobTimer { public class JobTimer {
static final String CUSTOMER_JOB_TIMER_JOBS = "customer_job_timer_jobs"; static final String CUSTOMER_JOB_TIMER_JOBS = "customer_job_timer_jobs";
@Autowired @Autowired
private RedissonClient client; private RedissonClient client;
@Autowired @Autowired
private ExecuteJob service; private ExecuteJob service;
ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2); ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2);
@PostConstruct @PostConstruct
public void startJobTimer() { public void startJobTimer() {
RBlockingQueue<Map<String,Object>> blockingQueue = client.getBlockingQueue(CUSTOMER_JOB_TIMER_JOBS); RBlockingQueue<Map<String,Object>> blockingQueue = client.getBlockingQueue(CUSTOMER_JOB_TIMER_JOBS);
RDelayedQueue<Map<String,Object>> delayedQueue = client.getDelayedQueue(blockingQueue); RDelayedQueue<Map<String,Object>> delayedQueue = client.getDelayedQueue(blockingQueue);
new Thread(() -> { new Thread(() -> {
while (true) { while (true) {
try { try {
Map<String,Object> job = blockingQueue.take(); Map<String,Object> job = blockingQueue.take();
executorService.execute(new ExecutorTask(job)); executorService.execute(new ExecutorTask(job));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
try { try {
TimeUnit.SECONDS.sleep(60); TimeUnit.SECONDS.sleep(60);
} catch (Exception ex) { } catch (Exception ex) {
} }
}finally { }finally {
delayedQueue.destroy(); delayedQueue.destroy();
} }
} }
}).start(); }).start();
} }
class ExecutorTask implements Runnable { class ExecutorTask implements Runnable {
private Map<String,Object> delayJob; private Map<String,Object> delayJob;
public ExecutorTask(Map<String,Object> delayJob) { public ExecutorTask(Map<String,Object> delayJob) {
this.delayJob = delayJob; this.delayJob = delayJob;
} }
@Override @Override
public void run() { public void run() {
service.execute(delayJob); service.execute(delayJob);
} }
} }
} }