From b1586371ceacb43eac09d4f73f8af61281314812 Mon Sep 17 00:00:00 2001 From: 王明元 <97082371@qq.com> Date: Wed, 1 Jun 2022 15:07:48 +0800 Subject: [PATCH] 2022年6月1日15:06:21 调整线程池队列长度, 修改回播匹配规则提高回播匹配率, 加快回放抓取频率 --- src/main/java/cn/fw/freya/service/crawl/impl/KuaiShouCrawl.java | 4 +++- src/main/java/cn/fw/freya/task/DataCaptureTask.java | 4 ++-- src/main/java/cn/fw/freya/utils/ThreadPoolUtil.java | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/cn/fw/freya/service/crawl/impl/KuaiShouCrawl.java b/src/main/java/cn/fw/freya/service/crawl/impl/KuaiShouCrawl.java index 5e8809e..572659f 100644 --- a/src/main/java/cn/fw/freya/service/crawl/impl/KuaiShouCrawl.java +++ b/src/main/java/cn/fw/freya/service/crawl/impl/KuaiShouCrawl.java @@ -466,7 +466,9 @@ public class KuaiShouCrawl implements CrawlStrategy { final double liveStartSub = BigDecimal.valueOf(Math.abs(liveStartTimeStamp - startTimeStamp)).divide(BigDecimal.valueOf(60 * 1000), 1, RoundingMode.HALF_UP).doubleValue(); // (Objects.equals(liveDuration, duration) || (timeSubAbs < 5))->说明时长几乎相等 // (liveStartSub < 2)->说明开播时间几乎一样 - if (!((Objects.equals(liveDuration, duration) || (timeSubAbs < 5)) && liveStartSub < 10)) { + if (!((Objects.equals(liveDuration, duration) || + (timeSubAbs < 5)) && liveStartSub < 10) || + !(startTimeStamp >= liveStartTimeStamp && startTimeStamp <= liveStartTimeStamp + liveDuration * 1000 && duration >= durationThreshold)) { playbackMsg = null; log.info(String.format("%s [%s]平台账户号为: %s的直播回放数据不匹配!!!", LocalDateTime.now(), this.getType().getName(), accountNo)); } diff --git a/src/main/java/cn/fw/freya/task/DataCaptureTask.java b/src/main/java/cn/fw/freya/task/DataCaptureTask.java index c107d23..54c4b4b 100644 --- a/src/main/java/cn/fw/freya/task/DataCaptureTask.java +++ b/src/main/java/cn/fw/freya/task/DataCaptureTask.java @@ -112,7 +112,7 @@ public class DataCaptureTask { .stream() .peek(item -> item.sort(Comparator.comparing(LivePool::getGetPlaybackFailTimes)))// 把某个人每条直播按失败次数排序 .sorted(Comparator.comparing(item -> item.get(0).getGetPlaybackFailTimes()))// 失败次数最小的人排到前面 - .limit(3)// 一次找3个人的直播 + .limit(5)// 一次找5个人的直播 .collect(Collectors.toList()); for (List list : values) {// 遍历每个人的直播集合 final String accountNo = list.get(0).getPhoneNo(); @@ -151,7 +151,7 @@ public class DataCaptureTask { livePoolDao.saveAll(livePools); publisher.publishEvent(account);// 发布事件 } - LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(20 + random.nextInt(15))); + LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(12 + random.nextInt(8))); } } diff --git a/src/main/java/cn/fw/freya/utils/ThreadPoolUtil.java b/src/main/java/cn/fw/freya/utils/ThreadPoolUtil.java index b9759c2..e7f24fd 100644 --- a/src/main/java/cn/fw/freya/utils/ThreadPoolUtil.java +++ b/src/main/java/cn/fw/freya/utils/ThreadPoolUtil.java @@ -33,7 +33,7 @@ public class ThreadPoolUtil { 12, 60, TimeUnit.SECONDS, - new LinkedBlockingQueue<>(256), + new LinkedBlockingQueue<>(128), new ThreadFactoryBuilder().setNamePrefix("capture-pool-").build(), new ThreadPoolExecutor.DiscardPolicy());// 自行创建线程池, 并将创建好的线程池对象赋值给类的静态成员变量threadPool } -- libgit2 0.22.2