延时队列优化

This commit is contained in:
hupeng committed 2024-06-30 10:40:29 +08:00
1 parent f31412f583
commit af7601ccb7
9 files changed
+235 -4

No files matched your search

@@ -0,0 +1,36 @@
package co.yixiang.yshop.module.order.handle;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import co.yixiang.yshop.framework.common.constant.ShopConstants;
import co.yixiang.yshop.framework.tenant.core.util.TenantUtils;
import co.yixiang.yshop.module.message.redismq.DelayedQueueListener;
import co.yixiang.yshop.module.message.redismq.msg.OrderMsg;
import co.yixiang.yshop.module.order.service.storeorder.AppStoreOrderService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* 自动收货订单监听
*/
@Component
@Slf4j
public class OrderAutoConfirmListener implements DelayedQueueListener<OrderMsg> {
@Resource
private AppStoreOrderService appStoreOrderService;
@Override
public String delayedQueueKey() {
return ShopConstants.REDIS_ORDER_OUTTIME_UNCONFIRM;
}
@Override
public void consume(OrderMsg message) throws Exception {
if(ObjectUtil.isNotNull(message) && StrUtil.isNotEmpty(message.getOrderId())) {
TenantUtils.executeIgnore(() -> {
appStoreOrderService.takeOrder(message.getOrderId(),null);
log.info("订单编号:{}自动确认收货成功",message.getOrderId());
});
}
}
}
@@ -0,0 +1,36 @@
package co.yixiang.yshop.module.order.handle;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import co.yixiang.yshop.framework.common.constant.ShopConstants;
import co.yixiang.yshop.framework.tenant.core.util.TenantUtils;
import co.yixiang.yshop.module.message.redismq.DelayedQueueListener;
import co.yixiang.yshop.module.message.redismq.msg.OrderMsg;
import co.yixiang.yshop.module.order.service.storeorder.AppStoreOrderService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* 未支付订单监听
*/
@Component
@Slf4j
public class OrderUnPayListener implements DelayedQueueListener<OrderMsg> {
@Resource
private AppStoreOrderService appStoreOrderService;
@Override
public String delayedQueueKey() {
return ShopConstants.REDIS_ORDER_OUTTIME_UNPAY_QUEUE;
}
@Override
public void consume(OrderMsg message) throws Exception {
if(ObjectUtil.isNotNull(message) && StrUtil.isNotEmpty(message.getOrderId())) {
TenantUtils.executeIgnore(() -> {
appStoreOrderService.cancelOrder(message.getOrderId(),null);
log.info("订单编号:{}自动取消订单成功",message.getOrderId());
});
}
}
}
@@ -17,12 +17,13 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadFactory;
/**
* 延时队列消费
* 延时队列消费 已经被废弃
* @author hupeng
* @date 2023.7.27
*/
@Component
//@Component
@Slf4j
@Deprecated
public class RedisDelayHandle {
@Resource
private RedissonClient redissonClient;
@@ -23,6 +23,7 @@ import co.yixiang.yshop.module.member.service.useraddress.AppUserAddressService;
import co.yixiang.yshop.module.member.service.userbill.UserBillService;
import co.yixiang.yshop.module.message.enums.WechatTempateEnum;
import co.yixiang.yshop.module.message.mq.producer.WeixinNoticeProducer;
import co.yixiang.yshop.module.message.redismq.msg.OrderMsg;
import co.yixiang.yshop.module.order.controller.app.order.param.AppOrderParam;
import co.yixiang.yshop.module.order.controller.app.order.param.AppPayParam;
import co.yixiang.yshop.module.order.controller.app.order.vo.AppStoreOrderQueryVo;
@@ -324,7 +325,7 @@ public class AppStoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper,Store
try {
RBlockingDeque<Object> blockingDeque = redissonClient.getBlockingDeque(ShopConstants.REDIS_ORDER_OUTTIME_UNPAY_QUEUE );
RDelayedQueue<Object> delayedQueue = redissonClient.getDelayedQueue(blockingDeque);
delayedQueue.offer(storeOrder, ShopConstants.ORDER_OUTTIME_UNPAY, TimeUnit.MINUTES);
delayedQueue.offer(OrderMsg.builder().orderId(orderSn).build(), ShopConstants.ORDER_OUTTIME_UNPAY, TimeUnit.MINUTES);
String s = TimeUnit.SECONDS.toSeconds(ShopConstants.ORDER_OUTTIME_UNPAY) + "分钟";
log.info("添加延时队列成功 ,延迟时间:" + s + "订单编号:" + orderSn);
} catch (Exception e) {
@@ -18,6 +18,7 @@ import co.yixiang.yshop.module.member.enums.BillDetailEnum;
import co.yixiang.yshop.module.member.service.user.MemberUserService;
import co.yixiang.yshop.module.member.service.userbill.UserBillService;
import co.yixiang.yshop.module.message.mq.producer.WeixinNoticeProducer;
import co.yixiang.yshop.module.message.redismq.msg.OrderMsg;
import co.yixiang.yshop.module.order.controller.admin.storeorder.vo.*;
import co.yixiang.yshop.module.order.convert.storeorder.StoreOrderConvert;
import co.yixiang.yshop.module.order.dal.dataobject.storeorder.StoreOrderDO;
@@ -161,7 +162,7 @@ public class StoreOrderServiceImpl implements StoreOrderService {
try {
RBlockingDeque<Object> blockingDeque = redissonClient.getBlockingDeque(ShopConstants.REDIS_ORDER_OUTTIME_UNCONFIRM);
RDelayedQueue<Object> delayedQueue = redissonClient.getDelayedQueue(blockingDeque);
delayedQueue.offer(updateReqVO.getOrderId(), ShopConstants.ORDER_OUTTIME_UNCONFIRM, TimeUnit.MINUTES);
delayedQueue.offer(OrderMsg.builder().orderId(updateObj.getOrderId()).build(), ShopConstants.ORDER_OUTTIME_UNCONFIRM, TimeUnit.MINUTES);
String s = TimeUnit.SECONDS.toSeconds(ShopConstants.ORDER_OUTTIME_UNCONFIRM) + "分钟";
log.info("添加延时队列成功 ,延迟时间:" + s);
} catch (Exception e) {