|
|
@@ -1,6 +1,7 @@
|
|
|
package com.kym.miniapp.jobs;
|
|
|
|
|
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
|
|
+import com.google.common.util.concurrent.RateLimiter;
|
|
|
import com.kym.common.utils.CommUtil;
|
|
|
import com.kym.entity.miniapp.ChargeOrder;
|
|
|
import com.kym.entity.miniapp.delay.DelayChargeOrder;
|
|
|
@@ -30,6 +31,7 @@ import java.util.concurrent.Executors;
|
|
|
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) // 设置成单例
|
|
|
public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
|
|
|
|
|
|
+ private final static RateLimiter rateLimiter = RateLimiter.create(4);
|
|
|
|
|
|
/**
|
|
|
* 预约订单队列
|
|
|
@@ -69,16 +71,17 @@ public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
|
|
|
START_DELAY_QUEUE.addAll(delayList);
|
|
|
|
|
|
// 开启线程处理队列消息
|
|
|
- executor.execute(() -> {
|
|
|
- ThreadLocal<String> threadLocal = new ThreadLocal<>();
|
|
|
- log.info("预约充电订单处理线程:{}", Thread.currentThread().getName());
|
|
|
- DelayedItem<DelayChargeOrder> delayedItem;
|
|
|
- while (true) {
|
|
|
+ while (true) {
|
|
|
+ executor.execute(() -> {
|
|
|
+ ThreadLocal<String> threadLocal = new ThreadLocal<>();
|
|
|
+ log.info("预约充电订单处理线程:{}", Thread.currentThread().getName());
|
|
|
+ DelayedItem<DelayChargeOrder> delayedItem;
|
|
|
+
|
|
|
try {
|
|
|
// 线程休眠100ms
|
|
|
Thread.sleep(100);
|
|
|
delayedItem = START_DELAY_QUEUE.take();
|
|
|
- log.info("出队预约充电订单:{},队列剩余:{}", delayedItem.data.getStartChargeSeq(), START_DELAY_QUEUE.size() - 1);
|
|
|
+ log.info("出队预约充电订单:{},队列剩余:{}", delayedItem.data.getStartChargeSeq(), START_DELAY_QUEUE.size());
|
|
|
// 启动充电
|
|
|
var order = delayedItem.data;
|
|
|
threadLocal.set(order.getStartChargeSeq());
|
|
|
@@ -97,16 +100,14 @@ public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
|
|
|
.eq(ChargeOrder::getStartChargeSeq, threadLocal.get())
|
|
|
.set(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_已结束)
|
|
|
.set(ChargeOrder::getOrderStatus, ChargeOrder.ORDER_STATUS_失败)
|
|
|
- .set(ChargeOrder::getStopReason, "预约启动充电失败")
|
|
|
+ .set(ChargeOrder::getStopReason, ChargeOrder.STOP_REASON_预约启动充电失败)
|
|
|
.update();
|
|
|
- // todo 这里是否会阻塞线程
|
|
|
}
|
|
|
} finally {
|
|
|
threadLocal.remove();
|
|
|
}
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|