03 2017 档案

摘要:在团队的重试与延迟调度项目中,使用了基于DelayQueue的方式来实现时间调度和触发,此处,对DelayQueue进行一些梳理。 首先是Queue接口,关于队列的含义,不再赘述。如下,Queue接口方法,按抛异常或返回特定值(null)可以分为两类如下图: 接下来是BlockingQueue接口, 阅读全文
posted @ 2017-03-21 10:17 Mr.do 阅读(752) 评论(0) 推荐(0)
摘要:延迟调度系统,核心在于基于时间的调度。上问说道,粗糙的时间调度可以使用job来执行,其时间误差可能达到分钟级。当需要进行更加精确的时间调度,就需要引入额外的手段了,此处,主要介绍两个方法:DelayQueue与环形队列。 (一)基于DelayQueue的延迟调度 关于DelayQueue的阐述,参考 阅读全文
posted @ 2017-03-20 16:50 Mr.do 阅读(427) 评论(0) 推荐(0)
摘要:首先,来说一下业务场景,也即什么时候,需要有这么一个系统,举两个例子: 1. 订单推送——点评侧垂直业务产生新的订单之后,需要推送给美团订单中心,以在美团APP展示出来。这种通过RPC调用的推送,是可能调用失败的,那么失败之后怎么处理呢?业务线程自己立即重试还是睡一会再重试都不是很合理。在推送失败后 阅读全文
posted @ 2017-03-17 11:46 Mr.do 阅读(886) 评论(0) 推荐(0)
摘要:在项目中,常常会遇到这么一种场景,即对一批/一种/一堆数据,进行链式的处理。举个栗子,拿到一个task后,需要对这个task进行校验处理、状态变更处理、计算并回填数据处理等等各种处理,这种情况下,最适合的编码方式就是使用责任链了: 定义一个taskprocessor接口: 然后,再定义诸多的实现类, 阅读全文
posted @ 2017-03-16 16:59 Mr.do 阅读(623) 评论(0) 推荐(0)
摘要:首先说说与ThreadLocal相识的背景。在项目中,service有一些逻辑处理{如对主从延迟敏感的下单逻辑}需要强制走主库的。就查了查公司数据库框架zebra强制走主库的方式,发现其主要就是在业务线程的context中写入了一个ThreadLocal<Boolean>变量,当要进行SQL路由时, 阅读全文
posted @ 2017-03-05 16:43 Mr.do 阅读(374) 评论(0) 推荐(0)