!2 解决订单未支付和订单超时确认两个延迟队列相互阻塞的问题和优化初始化SQL
Merge pull request !2 from guyang/dev_20240428
This commit is contained in:
2 files changed
+35
-6757
No files matched your search
File diff suppressed because it is too large.
Load diff
+24
-13
@@ -40,36 +40,47 @@ public class RedisDelayHandle {
|
|||||||
.setThreadFactory(threadFactory)
|
.setThreadFactory(threadFactory)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
executorService.execute(new ExecutorTask());
|
executorService.execute(new OrderOutTimeUnPayExecutorTask());
|
||||||
|
executorService.execute(new OrderOutTimeUnConfirmExecutorTask());
|
||||||
}
|
}
|
||||||
|
|
||||||
class ExecutorTask implements Runnable {
|
class OrderOutTimeUnPayExecutorTask implements Runnable {
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
RBlockingDeque<String> blockingDeque = redissonClient
|
RBlockingDeque<String> blockingDeque = redissonClient
|
||||||
.getBlockingDeque(ShopConstants.REDIS_ORDER_OUTTIME_UNPAY_QUEUE);
|
.getBlockingDeque(ShopConstants.REDIS_ORDER_OUTTIME_UNPAY_QUEUE);
|
||||||
RBlockingDeque<String> blockingDeque2 = redissonClient
|
|
||||||
.getBlockingDeque(ShopConstants.REDIS_ORDER_OUTTIME_UNCONFIRM);
|
|
||||||
while (true) {
|
while (true) {
|
||||||
String orderId = "";
|
String orderId = "";
|
||||||
String orderId2 = "";
|
|
||||||
try {
|
try {
|
||||||
orderId = blockingDeque.take();
|
orderId = blockingDeque.take();
|
||||||
orderId2 = blockingDeque2.take();
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Redission延迟队列监测异常中断,忽略此消息:{}", e.getMessage());
|
log.error("Redission延迟队列监测异常中断,忽略此消息:{}", e.getMessage());
|
||||||
}
|
}
|
||||||
if(StrUtil.isNotEmpty(orderId)) {
|
if (StrUtil.isNotEmpty(orderId)) {
|
||||||
appStoreOrderService.cancelOrder(orderId,null);
|
appStoreOrderService.cancelOrder(orderId, null);
|
||||||
}
|
}
|
||||||
if(StrUtil.isNotEmpty(orderId2)) {
|
|
||||||
appStoreOrderService.takeOrder(orderId,null);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class OrderOutTimeUnConfirmExecutorTask implements Runnable {
|
||||||
|
@SneakyThrows
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
RBlockingDeque<String> blockingDeque = redissonClient
|
||||||
|
.getBlockingDeque(ShopConstants.REDIS_ORDER_OUTTIME_UNCONFIRM);
|
||||||
|
while (true) {
|
||||||
|
String orderId = "";
|
||||||
|
try {
|
||||||
|
orderId = blockingDeque.take();
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Redission延迟队列监测异常中断,忽略此消息:{}", e.getMessage());
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotEmpty(orderId)) {
|
||||||
|
appStoreOrderService.takeOrder(orderId, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user