# 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);
}
```
#### 后续计划
为处理器加上各种策略的重试机制(超时重试、异常重试、业务异常重试),提供重试开关和重试次数,由用户自由选择是否开启重试机制、次数和各类重试策略。