距离上次源码分析,隔了很长时间,今天终于有时间和大家继续分享EJ中事件追踪的设计思路。
如果让你设计一个追踪job执行状态的事件流,你怎么做?
你可能会这样设计,在Job执行前插入DB,异常时插入DB,执行完时插入DB记录。主题思路是没有问题,但是,这里涉及到如何不影响Job执行流程,让追踪过程对Job无侵入性。这就是今天的重点
EventBus``AsyncEventBus
关键点已用红色框标出,这里是异步的,来看看代码
event相关的模块都在这里,包括DB操作都在这里
这里传递了一个jobEventConfig,实际上就是rdb相关的配置;我们来看下初始化JobEventBus构造函数
看到箭头指的内容没有,群里好多朋友在问,事件执行器启动了多少个线程,默认情况下是CPU
个数的两倍。
这里创建了一个事件总线EventBus,同时使用了异步总线,这样就不会影响主流程的执行。关于AsyncEventBus的相关内容,请自行参考Guava相关示例或google。总线创建好了,这时我们就需要注册监听器了
这里创建Listener时,会初始化DB相关脚本,这就是你们为什么没有找到sql文件的原因了
OK,很简单吧,我们来看下这个Listener,是不是只是简单的接口定义
重点:@Subscribe``@AllowConcurrentEvents
,这时guava中提供的,用来执行Listener中的方法,只要带上@Subscribe
就会被扫描到。
这是低层次API;高层次API由LiteJobFacade
、CloudJobFacade
进行装饰后调用
包括AbstractElasticJobExecutor
中的jobFacade.post*
都是触发相关事件
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/spy19881201/article/details/69536618
内容来源于网络,如有侵权,请联系作者删除!