# knight_event **Repository Path**: packagejava/knight_event ## Basic Information - **Project Name**: knight_event - **Description**: 基于spring的事件,再次进行封装 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2025-06-17 - **Last Updated**: 2025-06-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # knight_event #### 介绍 基于spring的事件,再次进行封装 #### 整体思路 整体分为几个核心模型即事件消息模型,事件监听器模型,事件处理器模型。事件消息模型是对Spring框架的ApplicationEvent类的二次封装, 添加了事件类型属性和事件具体信息属性;事件监听器模型主要是用来作为监听事件消息发布以后,再调用事件处理器模型的集合去处理相关消息。优点: 我们对原先spring框架内的事件消息进行了封装,添加上了消息类型属性,每个处理器也支持可以处理多类型的消息,同时为每个处理器提供了顺序号的属性( 如果需要处理器按顺序去处理事件消息) #### 使用教程 1.使用spring来触发消息事件 ``` Object o = new Object(); //消息的具体数据 String evnetType = "dealType"; //定义事件消息的类型 EventDate eventDate = new EventDate(this,o,evnetType); //组装消息 applicationContext.publishEvent(new EventDate(this, eventData)); /推送消息 ```
2.添加相关的处理器 由于是基于spring框架来构建事件消息处理机制,故相关的处理器需要纳入到spring容器里来才能起到作用。 ``` //具体的事件处理器示例代码 @Component public class XXEventHandler extends AbstractEventHandler{ @Override boolean doHandler(Object data) { //处理具体业务逻辑的地方 return false; } @Override void release() { //主要是做一些释放资源的操作,如果没有可以忽略不写 } /** * 返回事件处理器的名称 * @return */ @Override public String getHandlerName() { return "dealEventHandler"; } /** * 具体支持处理哪些类型的事件消息 * @return */ @Override public List supportEventTypeList() { return Arrays.asList("dealType"); } /** * 提供事件处理器序号,按照从大到小的顺序进行事件消息处理 * 如果无需顺序,可忽略该方法不提供重写,会有默认的序号0提供 * @return */ @Override public Integer getOrder() { return 1; } } ``` 添加事件处理器缓存池到容器里,通过继承BeanPostProcessor类来构建事件处理器缓存池,在每个EventHandler被加载到spring容器里的时候 就会被同时加载到缓存池里。 ``` @Bean public EventHandlerPool eventHandlerPool() { return new EventHandlerPool(); } ```
3.构建监听器 目前提供了俩种监听器,供大家选择:1.SimpleEventListener简单的事件监听器,基本上就是遍历事件处理器来处理事件消息,没有什么特别的;2. AsyncEventListener异步事件监听器,最大的区别就是通过异步的方式来处理事件消息。 ``` //构建SimpleEventListener @Bean public SimpleEventListener simpleEvenetListener(@Autowired EventHandlerPool eventHandlerPool) { return new SimpleEventListener(eventHandlerPool); } ```
以上是使用SimpleEventListener的时候,一般情况下我们更多的是会选择异步监听器来处理各种事件消息: ``` //构建AsyncEventListener @Bean public AsyncEventListener asyncEventListener(@Autowired ThreadPoolExecutor threadPoolExecutor, @Autowired EventHandlerPool eventHandlerPool) { return new AsyncEventListener(threadPoolExecutor, eventHandlerPool); } ``` #### 后续计划 为处理器加上各种策略的重试机制(超时重试、异常重试、业务异常重试),提供重试开关和重试次数,由用户自由选择是否开启重试机制、次数和各类重试策略。