96SEO 2026-02-19 22:34 0
简单点说就是从websocket获取到的实时数据#xff0c;既要兼容不耗时操作#xff0c;又要兼容耗时操作。

单线程做的话业务1基于实时轨迹数据打卡业务2基于非实时轨迹的时间差计算累计时长。
简单点说就是从websocket获取到的实时数据既要兼容不耗时操作又要兼容耗时操作。
实现思路是用TaskExecutor来做一个task接收从redis
lPop的数据并放入BlockingQueue另外的task从BlockingQueue获取数据。
{e.printStackTrace();}}});return
null;}Bean(calculationsBusinessData)public
{//耗时方法doSomething();//存储当前日期人员的最新位置坐标saveTrackToRedis(trackRealTime);}}
e.getMessage());}}});}Bean(calculationsKeepWatch)public
{doSomething2(trackRealTime);}}
redisTemplate.opsForList().leftPop(RedisKeyCons.COORDINATE);if
(!org.springframework.util.StringUtils.isEmpty(o))
(checkMemberExist(trackRealTime))
{return;}//存储当前日期人员的最新位置坐标saveTrackToRedisForKeepWatch(trackRealTime);dataQueue.add(trackRealTime);keepWatchQueue.add(trackRealTime);}}}
ThreadPoolTaskExecutor();taskExecutor.setCorePoolSize(1);taskExecutor.setMaxPoolSize(1);return
taskExecutor;}Bean(nametaskExecutor2)public
ThreadPoolTaskExecutor();//最大线程数taskExecutor.setMaxPoolSize(5);//核心线程数taskExecutor.setCorePoolSize(5);//任务队列的大小taskExecutor.setQueueCapacity(5);//线程前缀名
executor.setThreadNamePrefix();//线程存活时间taskExecutor.setKeepAliveSeconds(60);taskExecutor.setRejectedExecutionHandler(new
ThreadPoolExecutor.AbortPolicy());//线程初始化return
taskExecutor;}Bean(nametaskExecutor3)public
ThreadPoolTaskExecutor();//最大线程数taskExecutor.setMaxPoolSize(5);//核心线程数taskExecutor.setCorePoolSize(5);//任务队列的大小taskExecutor.setQueueCapacity(5);//线程前缀名
executor.setThreadNamePrefix();//线程存活时间taskExecutor.setKeepAliveSeconds(60);taskExecutor.setRejectedExecutionHandler(new
ThreadPoolExecutor.AbortPolicy());//线程初始化return
ThreadPoolTaskExecutor();//核心线程数taskExecutor.setCorePoolSize(10);//线程池维护线程的最大数量,只有在缓冲队列满了之后才会申请超过核心线程数的线程taskExecutor.setMaxPoolSize(10);//缓存队列taskExecutor.setQueueCapacity(15);//设置线程的空闲时间,当超过了核心线程出之外的线程在空闲时间到达之后会被销毁taskExecutor.setKeepAliveSeconds(60);//异步方法内部线程名称taskExecutor.setThreadNamePrefix(async-);/***
当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize如果还有任务到来就会采取任务拒绝策略*
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
*
ThreadPoolExecutor.DiscardPolicy也是丢弃任务但是不抛出异常。
*
ThreadPoolExecutor.DiscardOldestPolicy丢弃队列最前面的任务然后重新尝试执行任务重复此过程*
ThreadPoolExecutor.CallerRunsPolicy重试添加当前的任务自动重复调用
方法直到成功*/taskExecutor.setRejectedExecutionHandler(new
ThreadPoolExecutor.CallerRunsPolicy());taskExecutor.initialize();return
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback