1 Star 0 Fork 3

苏今洋 / knight_event

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
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<String,Object>{


    @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);
}

后续计划

为处理器加上各种策略的重试机制(超时重试、异常重试、业务异常重试),提供重试开关和重试次数,由用户自由选择是否开启重试机制、次数和各类重试策略。

空文件

简介

基于spring的事件,再次进行封装 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/Aqishi/knight_event.git
git@gitee.com:Aqishi/knight_event.git
Aqishi
knight_event
knight_event
master

搜索帮助