随想 2018052202
继续学习事件驱动编程:
1. 方法论中的: Observer 设计模式, Pub-Sub MQ设计模式
2. 业务之间的解耦,必须引入一个额外的一个组件来。还是那句话: add addtional indirecation layer for flexible or discompose.
3. Zookeeper 中 watch 机制也可以用来解耦(分布式),作为事件驱动执行器,FileWatch也是可以的
4. 事件、事件源、发布事件、消费事件、事件处理器 Executor
5. Spring: ApplicationContext, ApplicationEvent, ApplicationEventListner, @EventListener, 事件处理器的 并发处理需要配置 @Configuration
6. ApplicationEvent: startup, refresh, shutdown
7. @Async 可以使方法异步执行
publish<event> -----> executor (ThreadPool) <------- handler<event>
可获取结果的异步 PubSub 模式
1. Publish event
2. Tranlate event to internal bucket with id for exchange the information between producer & consumer
3. Create Future<?> and save map container with bucket id
4. Save internal bucket to local memory waiting for executor to send
5. Way 1: directly create new FutureTask<?> with Callable<?> executing body and submit it to executor, after event is done by handler, Future<?> can be get
6. Way 2: Using ArrayBlockingQueue<?> with only 1 element inside subclass of Future<?>, and create a connetion between Future<?> and bucket id, after registering the
listener to executor for waiting for the event is done by handler. If done, set ArrayBlockingQueue<?> by finding object the subclass of Future<?> from container with bucket id