diff --git a/yarn/yarn_event.md b/yarn/yarn_event.md new file mode 100644 index 0000000..9c8bd2a --- /dev/null +++ b/yarn/yarn_event.md @@ -0,0 +1,58 @@ + +# 简介 + +Yarn采用了基于事件驱动的并发模型: + +- 所有状态机都实现了EventHandler接口,很多服务(类名通常带有Service后缀)也实现了该接口,它们都是事件处理器 +- 需要异步处理的事件由中央异步调度器(类名通常带有Dispatcher后缀)统一接收/派发,需要同步处理的事件直接交给相应的事件处理器。 + +![pic](https://pan.zeekling.cn/zeekling/hadoop/event/state_event_001.png) + +某些事件处理器不仅处理事件,也会向中央异步调度器发送事件。 + + +# 事件处理器定义 + +事件处理器定义如下: + +```java +@SuppressWarnings("rawtypes") +@Public +@Evolving +public interface EventHandler { + + void handle(T event); + +} +``` + +只有一个handler函数,如参是事件: + + +# 中央处理器AsyncDispatcher + +AsyncDispatcher 实现了接口Dispatcher,Dispatcher中定义了事件Dispatcher的接口。主要提供两个功能: +- 注册不同类型的事件。 +- 获取所有的事件处理器。 + +```java +@Public +@Evolving +public interface Dispatcher { + + EventHandler getEventHandler(); + + void register(Class eventType, EventHandler handler); + +} +``` + +AsyncDispatcher实现了Dispatcher接口,也扩展了AbstractService,表明AsyncDispatcher也是一个服务: + +```java +public class AsyncDispatcher extends AbstractService implements Dispatcher { + ... +} +``` + +