最近一个需求,接口监控异常,需要进行一连串逻辑处理,又新加需要给运维人员发短信,异步处理,不能影响源代码逻辑,因此用到事件发布器
在事件驱动中有三个比较重要的组件:
Event 发布的事件对象
EventPublisher:事件发布对象
EventListener:事件监听对象
1.定义一个事件发布类型,
/**
* 自定义一个事件对象,继承ApplicationEvent
*
* */
public class TestEvent extends ApplicationEvent {
//
public TestEvent(Object source) {
super(source);
}
}
2.定义事件发送器
/**
* 自定义事件发布者
*/
@Component
public class TestEventPublisher implements ApplicationEventPublisherAware {
private ApplicationEventPublisher publisher;
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.publisher = applicationEventPublisher;
}
// 发布的事件内容 Object 可以是任意对象
// 业务直接调查此方法就可以发送事件,然后在监听器就可以获取
// 发布的事件obj对象,进行后续业务处理
public void sendEvent(Object obj) {
// 发布事件
publisher.publishEvent(new TestEvent(obj));
}
}
3.事件监听器
/**
* 自定义监听事件,监听的时间就是发布的事件
* */
@Component
public class TestLister implements ApplicationListener<TestEvent> {
@Override
public void onApplicationEvent(TestEvent event) {
// 获取事件的内容
Object source = event.getSource();
}
}