1769-PB2任务持久化存储之后,我们采用一个Daemon程序执行定期扫表任务,将到期的任务取出,将请求中带的业务信息(biz_data添加任务时带来,定时器透传,不关注其具体内容)回调通知业务方。这么一看流程还是很简单的。
这里扫描的流程类似上面讲的时间轮算法,会有一个指针(我们在这里不妨称之为time_pointer)不断向后移动,保证不会漏掉任何一个bucket的任务。这里我们采用的是commkv(可以简单理解为可以按照key-value形式读写的kv,其底层仍是基于tablekv实现)存储CurrentTime,也就是当前处理到的时间戳。每次轮询时Daemon都会通过GetByKey接口获取到CurrentTime,若大于当前机器时间,则sleep一段时间。若小于等于当前机器时间,则取出tablekv中以CurrentTime为uin的分表的TaskList进行处理。本次轮询结束,则CurrentTime加一,再通过SetByKey设置回commkv。这个部分的工作模式我们可以简称为Scheduler。
Scheduler拿到任务后只需要回调通知业务方即可。如果采用同步通知业务方的方式,由于业务方的超时情况是不可控的,则一个任务的投递时间可能会较长,导致拖慢这个时间点的任务整体通知进度。故而这里自然而然想到采用异步解耦的方式。即将任务发布至事件中心(微信内部的高可用、高可靠的消息平台,支持事务和非事务消息。由于一个任务的投递到事件中心的时间仅为几十ms,理论上任务量级不大时1s内都可以处理完。此时time_pointer会紧跟当前时间戳。当大量任务需要处理时,需要采用多线程/多协程的方式并发处理,保证任务的准时交付。broker订阅事件中心的消息,接受到消息后由broker回调通知业务方,故broker也充当了Notifier的角色。
1769-PB2
1769-PB2
ALLEN BRADLEY 700-CF400ZJ Ser A Control Relay (2781)
ALLEN BRADLEY 700-CF400D Ser A Control Relay (2781)
ALLEN BRADLEY 100-C30ZJ10 SER C CONTACTOR 24VDC (2780)
12 Nordson Connectors part # 972628A 0 9/16 (2775)
12 Connectors for Nordson, part # 972628A 0 9/16 (2774)
HUMPHREY Pneumatic Foot Control 49003 250F (3062)
EATON Cutler-Hammer PS256A-05B1 Power Supply New (3066)
EATON Cutler-Hammer PS256A-05B1 Power Supply New (3054)
Cutler Hammer Limit Switch E50SAL, E50RA, E50DH1 (3052)
Leeson 175326 FHP AC Drive Motor Control - New (3060)
Finder Mini Relay 55.13.9.024.000?0 24 VDC 11 Pin (2835)
Siemens Power Module 6SN1123-1AA00-0?LA3 New (3069)
GE Fanuc Series 90-30 Output IC693MDL940D (2956)
GE Fanuc Series 90-30 Output IC693MDL740E (2955)
GE Fanuc Series 90-30 Input IC693MDL645B (2953)
Andersen Sailboat Bailers Mini 1 1/2" x 2 1/4" - NEW
GE Fanuc Series 90-30 Power Supply IC693PWR321R (2951)
Jet-Set Flex Nozzle Holder 1000-M (2950)
Digital AC/DC Clamp On Meter BK Model 330B (2949)
Allen-Bradley 3-POS Selector Switch 800T-J4 New (3076)
Digital AC/DC Clamp On Meter GCM-307 - New (2948)
Symbol Universal Battery Charger 21-65587-01 (2476)
Siemens Switch 3SE7 160-1BD00-0AS1 - New ( 3075)
Prominent Meterings Fluids Metering Pump GAMMA/4 (3071)
Anderson Inst. Co EDT 160-A20 Temp Xmitter Xducer (3070
Square D Heavy Duty Safety Switch 60 AMP (2046)
Square D Class 8502 Type PC 3.10 E Contactor (2149)
VeriFone Interface PP101 IBM AT 10776-02 (2927)
Square D Powerlink Circuit Breaker QO120AS 20A 120VAC