Zeus-Master-Dispatcher事件分发策略

Zeus使用 observer设计模式 ,在Zeus中将不同的操作,不同的状态改变都提炼成不同的事件类型。为不同的事件添加不同的事件监听实例,当事件触发之后,会通知到对这个事件的监听的不同的对象;

 private void dispatch(AppEvent event) {
   try {
   MvcEvent e = new MvcEvent(this, event);
   e.setAppEvent(event);
   if (fireEvent(BeforeDispatch, e)) {
     List<Controller> copy = new ArrayList<Controller>(controllers);
     for (Controller controller : copy) {
       if (controller.canHandle(event)) {
         if (!controller.initialized) {
           controller.initialized = true;
           controller.initialize();
         }
         controller.handleEvent(event);
       }
     }
     fireEvent(AfterDispatch, e);
   }
} catch (Exception e) {
   ScheduleInfoLog.error("dispatch error", e);
}
 }

Dispatcher 分发每个事件,除了前置和后置拦截处理BeforeDispatchAfterDispatch,会通知所有的job控制器,当然如果该事件不需要改job控制器处理,则 controller.handleEvent(event); 直接返回。这里的分发需要注意事件分发非异步事件非串序

推荐阅读更多精彩内容