序
本文主要介绍一下jesque的event机制
WorkerEvent
jesque-2.1.2-sources.jar!/net/greghaines/jesque/worker/WorkerEvent.java
1 | 复制代码/** |
JOB_PROCESS与JOB_EXECUTE可能让人有点迷糊。二者之间有个去redis更新状态以及实例化job的操作,而JOB_EXECUTE则是before execute的意思
JOB_SUCCESS以及JOB_FAILURE则是after execute的意思
WorkerEventEmitter
jesque-2.1.2-sources.jar!/net/greghaines/jesque/worker/WorkerEventEmitter.java
1 | 复制代码/** |
定义了event emitter的接口
WorkerListenerDelegate
jesque-2.1.0-sources.jar!/net/greghaines/jesque/worker/WorkerListenerDelegate.java
1 | 复制代码/** |
event emitter的实现类,使用EnumMap来存放listener,key是WorkerEvent枚举,而value则是listener的ConcurrentSet,即同一个event可以有多个listener。
事件的触发
jesque-2.1.2-sources.jar!/net/greghaines/jesque/worker/WorkerImpl.java
1 | 复制代码protected final WorkerListenerDelegate listenerDelegate = new WorkerListenerDelegate(); |
在wokerImpl类里头,组合了WorkerEventEmitter的实现类,然后在相应的方法里头去触发/通知相应的listener(
默认是同步执行
)
小结
其实本质就是观察者模式,workerImpl是被观察者,listener是观察者,wokerImpl在有相应执行点会触发相应事件,同步通知listner执行相关逻辑。
doc
本文转载自: 掘金