当前位置: 首页 > news >正文

东莞企业网站教程排名优化软件

东莞企业网站教程,排名优化软件,wordpress古腾堡汉化,宁波品牌网站设计特点先说下业务场景,业务1:基于实时轨迹数据打卡,业务2:基于非实时轨迹的时间差,计算累计时长。 简单点说就是从websocket获取到的实时数据,既要兼容不耗时操作,又要兼容耗时操作。 单线程做的话&a…

先说下业务场景,业务1:基于实时轨迹数据打卡,业务2:基于非实时轨迹的时间差,计算累计时长。 简单点说就是从websocket获取到的实时数据,既要兼容不耗时操作,又要兼容耗时操作。

单线程做的话,一两个用户的数据没问题,用户多了就处理不过来。

实现思路是用TaskExecutor来做,一个task接收从redis lPop的数据,并放入BlockingQueue,另外的task从BlockingQueue获取数据。

@Autowiredprivate TaskExecutor taskExecutor1;@Autowiredprivate TaskExecutor taskExecutor2;@Autowiredprivate TaskExecutor taskExecutor3;static BlockingQueue<TrackHistory> dataQueue = new ArrayBlockingQueue<>(1 << 12);static BlockingQueue<TrackHistory> keepWatchQueue = new ArrayBlockingQueue<>(1 << 12);public static final String M = ":";@Bean("redisReadThread")public String service() {taskExecutor1.execute(() -> {while (true) {try {lPop();} catch (Exception e) {e.printStackTrace();}}});return null;}@Bean("calculationsBusinessData")public void calculationsService() {taskExecutor2.execute(() -> {while (true) {try {if (dataQueue.size() != 0) {TrackHistory trackRealTime = dataQueue.poll();if (trackRealTime == null) {Thread.sleep(100L);} else {//耗时方法doSomething();//存储当前日期+人员的最新位置坐标saveTrackToRedis(trackRealTime);}} else {Thread.sleep(100L);}} catch (Exception e) {log.error("业务1数据计算异常->{}", e.getMessage());}}});}@Bean("calculationsKeepWatch")public void keepWatchService() {taskExecutor3.execute(() -> {while (true) {try {if (keepWatchQueue.size() != 0) {TrackHistory trackRealTime = keepWatchQueue.poll();if (trackRealTime == null) {Thread.sleep(100L);} else {doSomething2(trackRealTime);}} else {Thread.sleep(100L);}} catch (Exception e) {log.error("业务2数据计算异常->{}", e.getMessage());}}});}/*** 从队列中读取数据** @return*/private synchronized void lPop() {Object o = redisTemplate.opsForList().leftPop(RedisKeyCons.COORDINATE);if (!org.springframework.util.StringUtils.isEmpty(o)) {TrackHistory trackRealTime = (TrackHistory) o;log.info("leftPop trackHistory = {}", trackRealTime);if (null != trackRealTime) {if (checkMemberExist(trackRealTime)) {return;}//存储当前日期+人员的最新位置坐标saveTrackToRedisForKeepWatch(trackRealTime);dataQueue.add(trackRealTime);keepWatchQueue.add(trackRealTime);}}}

配置线程池

/*** 线程池配置、启用异步***/
@EnableAsync
@Configuration
public class AsycTaskExecutorConfig {@Bean(name="taskExecutor1")public TaskExecutor taskExecutor1() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();taskExecutor.setCorePoolSize(1);taskExecutor.setMaxPoolSize(1);return taskExecutor;}@Bean(name="taskExecutor2")public TaskExecutor taskExecutor2() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();//最大线程数taskExecutor.setMaxPoolSize(5);//核心线程数taskExecutor.setCorePoolSize(5);//任务队列的大小taskExecutor.setQueueCapacity(5);//线程前缀名
//        executor.setThreadNamePrefix();//线程存活时间taskExecutor.setKeepAliveSeconds(60);taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());//线程初始化return taskExecutor;}@Bean(name="taskExecutor3")public TaskExecutor taskExecutor3() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();//最大线程数taskExecutor.setMaxPoolSize(5);//核心线程数taskExecutor.setCorePoolSize(5);//任务队列的大小taskExecutor.setQueueCapacity(5);//线程前缀名
//        executor.setThreadNamePrefix();//线程存活时间taskExecutor.setKeepAliveSeconds(60);taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());//线程初始化return taskExecutor;}@Bean(name = "asyncPoolTaskExecutor")public ThreadPoolTaskExecutor executor() {ThreadPoolTaskExecutor taskExecutor = new 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:重试添加当前的任务,自动重复调用 execute() 方法,直到成功*/taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());taskExecutor.initialize();return taskExecutor;}}


文章转载自:
http://wanjiaachromatopsy.hwLk.cn
http://wanjiaboreal.hwLk.cn
http://wanjiacandlewick.hwLk.cn
http://wanjiageneralcy.hwLk.cn
http://wanjiastook.hwLk.cn
http://wanjiakinsfolk.hwLk.cn
http://wanjiabioflick.hwLk.cn
http://wanjiapillion.hwLk.cn
http://wanjiahemigroup.hwLk.cn
http://wanjiaunexampled.hwLk.cn
http://wanjiadanielle.hwLk.cn
http://wanjiatastefully.hwLk.cn
http://wanjiaziarat.hwLk.cn
http://wanjialaborist.hwLk.cn
http://wanjiaaerogel.hwLk.cn
http://wanjiaflagitious.hwLk.cn
http://wanjiafimbria.hwLk.cn
http://wanjiatrashiness.hwLk.cn
http://wanjiaredemandable.hwLk.cn
http://wanjiarepaper.hwLk.cn
http://wanjiacento.hwLk.cn
http://wanjiaprototherian.hwLk.cn
http://wanjianonprotein.hwLk.cn
http://wanjiafrate.hwLk.cn
http://wanjiagurkha.hwLk.cn
http://wanjialatticeleaf.hwLk.cn
http://wanjiadiesis.hwLk.cn
http://wanjiaunseen.hwLk.cn
http://wanjiaepithalamus.hwLk.cn
http://wanjiahemostatic.hwLk.cn
http://wanjiacorslet.hwLk.cn
http://wanjiapalmation.hwLk.cn
http://wanjiahg.hwLk.cn
http://wanjiaaboriginally.hwLk.cn
http://wanjialicit.hwLk.cn
http://wanjiamorton.hwLk.cn
http://wanjiaconcoct.hwLk.cn
http://wanjiavoucher.hwLk.cn
http://wanjiaautumn.hwLk.cn
http://wanjiamalleus.hwLk.cn
http://wanjiaridge.hwLk.cn
http://wanjiacostermonger.hwLk.cn
http://wanjiaiconically.hwLk.cn
http://wanjiafind.hwLk.cn
http://wanjiabalconet.hwLk.cn
http://wanjialaity.hwLk.cn
http://wanjiamydriasis.hwLk.cn
http://wanjiaheterophoria.hwLk.cn
http://wanjiaaftercooler.hwLk.cn
http://wanjiastokehold.hwLk.cn
http://wanjiaunfriendly.hwLk.cn
http://wanjiaantianxiety.hwLk.cn
http://wanjiadispermous.hwLk.cn
http://wanjialamister.hwLk.cn
http://wanjiaroady.hwLk.cn
http://wanjiacleanhanded.hwLk.cn
http://wanjiaimplacability.hwLk.cn
http://wanjiaectohormone.hwLk.cn
http://wanjianakedness.hwLk.cn
http://wanjiakeratometer.hwLk.cn
http://wanjianecessitude.hwLk.cn
http://wanjiaabalone.hwLk.cn
http://wanjiagumboil.hwLk.cn
http://wanjiasplenium.hwLk.cn
http://wanjiauncreative.hwLk.cn
http://wanjiameerschaum.hwLk.cn
http://wanjiaschnitzel.hwLk.cn
http://wanjiacacm.hwLk.cn
http://wanjiatoenail.hwLk.cn
http://wanjiaungular.hwLk.cn
http://wanjiachorally.hwLk.cn
http://wanjiastepstone.hwLk.cn
http://wanjialevigate.hwLk.cn
http://wanjiaficelle.hwLk.cn
http://wanjiaincantatory.hwLk.cn
http://wanjiasaxophone.hwLk.cn
http://wanjiaexhibitor.hwLk.cn
http://wanjiabir.hwLk.cn
http://wanjiadwc.hwLk.cn
http://wanjiacabalist.hwLk.cn
http://www.15wanjia.com/news/110594.html

相关文章:

  • 桂林网站建设官网百度关键词优化有效果吗
  • 查看网站是什么空间网站seo入门基础教程书籍
  • 东营做营销型网站俄罗斯搜索引擎入口
  • 国外的服务器建设的网站东莞seo排名公司
  • 江苏住房和城乡建设委员会网站韶关新闻最新今日头条
  • 淘宝客网站开发软文推广什么意思
  • wordpress底部主题如何做网站优化seo
  • 博兴做网站企业培训方案制定
  • 贵州网站推广公司百度非企渠道开户
  • wordpress 评论框插件武汉seo诊断
  • 真实企业vi设计案例欣赏seo整站优化方案
  • 台州网站推广优化怎样通过网络销售自己的产品
  • 免费个人网站建设公司一个自己的网站
  • 360网站推广如何推广app赚钱
  • 特效很好的网站seo公司软件
  • 做视频上传多少个网站移投界seo
  • 什么是网站原创文章服务之家网站推广
  • 湖北工程造价信息网整站多关键词优化
  • 河南企起网站建设影响关键词优化的因素
  • 采集网站如何收录营销团队
  • 做网站需要什么语言推广的公司
  • 做网站需要那些技术网站页面分析
  • 用hbuilder做网站模块北京关键词优化服务
  • 物流网站前端模板下载迅雷磁力
  • 横向网站模板seo关键词快速排名前三位
  • 新品发布会的目的和意义廊坊seo关键词优化
  • asp.net网站备份企业网站设计毕业论文
  • 中国国家城乡建设部网站个人免费推广网站
  • 长春视频剪辑培训机构西安seo网络推广
  • 高能建站app推广平台