由于想在項目中使用類似yarn的事件處理機制,就看了實作。主要是由Dispatcher.java,EventHandler.java,Service.java這3個類撐起來的。
在事件處理之前,先注冊相應的事件處理handler,收到事件event後,由派發事件的Dispatcher進行派發,預設采用異步事件處理方式将事件放到事件隊列(LinkedBlockingQueue)中,消費者會循環從隊列中取出事件進行處理。
要使用事件處理,首先需要建立Dispatcher,示例代碼如下:
然後通過AsyncDispatcher調用getEventHandler()傳回的EventHandler的處理對應事件,AsyncDispatcher類的getEventHandler()方法如下:
上述完成生産,再看消費如下實作的:
檢視createThread()方法,如下所示:
從eventQueue隊列中取出Event,然後調用dispatch(event);來處理事件,看dispatch(event)方法,如下所示:
整個過程使用生産--消費者模型,異步事件處理,整體實作起來還是很簡單的!