|
@@ -13,6 +13,11 @@ import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.concurrent.ExecutorService;
|
|
|
+import java.util.concurrent.SynchronousQueue;
|
|
|
+import java.util.concurrent.ThreadPoolExecutor;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+
|
|
|
@Service
|
|
|
public class AndroidPushServiceImpl implements AndroidPushService {
|
|
|
private static final Logger LOG = LoggerFactory.getLogger(AndroidPushServiceImpl.class);
|
|
@@ -34,32 +39,45 @@ public class AndroidPushServiceImpl implements AndroidPushService {
|
|
|
@Autowired
|
|
|
private FCMPush fcmPush;
|
|
|
|
|
|
+ private ExecutorService executorService = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), Runtime.getRuntime().availableProcessors() * 100,
|
|
|
+ 60L, TimeUnit.SECONDS,
|
|
|
+ new SynchronousQueue<Runnable>());
|
|
|
+
|
|
|
@Override
|
|
|
public Object push(PushMessage pushMessage) {
|
|
|
LOG.info("Android push {}", new Gson().toJson(pushMessage));
|
|
|
- switch (pushMessage.getPushType()) {
|
|
|
- case AndroidPushType.ANDROID_PUSH_TYPE_XIAOMI:
|
|
|
- xiaomiPush.push(pushMessage);
|
|
|
- break;
|
|
|
- case AndroidPushType.ANDROID_PUSH_TYPE_HUAWEI:
|
|
|
- hmsPush.push(pushMessage);
|
|
|
- break;
|
|
|
- case AndroidPushType.ANDROID_PUSH_TYPE_MEIZU:
|
|
|
- meiZuPush.push(pushMessage);
|
|
|
- break;
|
|
|
- case AndroidPushType.ANDROID_PUSH_TYPE_VIVO:
|
|
|
- vivoPush.push(pushMessage);
|
|
|
- break;
|
|
|
- case AndroidPushType.ANDROID_PUSH_TYPE_OPPO:
|
|
|
- oppoPush.push(pushMessage);
|
|
|
- break;
|
|
|
- case AndroidPushType.ANDROID_PUSH_TYPE_FCM:
|
|
|
- fcmPush.push(pushMessage);
|
|
|
- break;
|
|
|
- default:
|
|
|
- LOG.info("unknown push type");
|
|
|
- break;
|
|
|
- }
|
|
|
+ final long start = System.currentTimeMillis();
|
|
|
+ executorService.execute(()->{
|
|
|
+ long now = System.currentTimeMillis();
|
|
|
+ if (now - start > 15000) {
|
|
|
+ LOG.error("等待太久,消息抛弃");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (pushMessage.getPushType()) {
|
|
|
+ case AndroidPushType.ANDROID_PUSH_TYPE_XIAOMI:
|
|
|
+ xiaomiPush.push(pushMessage);
|
|
|
+ break;
|
|
|
+ case AndroidPushType.ANDROID_PUSH_TYPE_HUAWEI:
|
|
|
+ hmsPush.push(pushMessage);
|
|
|
+ break;
|
|
|
+ case AndroidPushType.ANDROID_PUSH_TYPE_MEIZU:
|
|
|
+ meiZuPush.push(pushMessage);
|
|
|
+ break;
|
|
|
+ case AndroidPushType.ANDROID_PUSH_TYPE_VIVO:
|
|
|
+ vivoPush.push(pushMessage);
|
|
|
+ break;
|
|
|
+ case AndroidPushType.ANDROID_PUSH_TYPE_OPPO:
|
|
|
+ oppoPush.push(pushMessage);
|
|
|
+ break;
|
|
|
+ case AndroidPushType.ANDROID_PUSH_TYPE_FCM:
|
|
|
+ fcmPush.push(pushMessage);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ LOG.info("unknown push type");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ });
|
|
|
return "ok";
|
|
|
}
|
|
|
}
|