上图是一个事件从new出来到被执行的整套流程,结合之前几篇文章,再次梳理一遍整个流程:
- 首先,比如一个服务注册事件,会经过NotifyCenter的静态方法publishEvent来发布一个事件
- 然后会根据该事件的全限定类名,去NotifyCenter内部的publishMap中找到这个事件所对应的事件发布者
- 这个时候调用事件发布者的
**offer**
方法向阻塞队列**queue**
中添加事件,来暂存消息 - 同时呢,事件发布者也是一个线程,在其被new出来的同时,就被调用了start方法,开始一直从阻塞队列中取事件
- 当取出事件后,handleEvent就会拿到其事件的Class的类型,然后再在其内部的subscribes中取出订阅了这个事件类型的所有的订阅者们
- 最后再判断这个订阅者针对这个事件是需要同步方式还是异步方式处理事件
- 调用订阅者的onEvent(T event)方法,事件执行的落地点
至此,消息通知的整个模型都已经梳理的差不多了,关于消息通知中心,事件发布者,事件订阅者,以及事件的源码分析可参考之前的文章