代码拉取完成,页面将自动刷新
基于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();
}
//构建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);
}
为处理器加上各种策略的重试机制(超时重试、异常重试、业务异常重试),提供重试开关和重试次数,由用户自由选择是否开启重试机制、次数和各类重试策略。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。