springBoot实现发布订阅
应用场景:
在开发中,有时需要监听某些事件,在事件触发时,执行相应的逻辑。
也可以说是基于事件驱动的观察者模式。
比如当点击某个按钮时,触发相应的功能,或者用户下单通知等等。
SpringBoot 可以通过 ApplicationEvent 、ApplicationEventPublisher、@EventListener 实现事件的发布订阅。
Event事件
继承 ApplicationEvent,定义 Event事件。
构造方法,需要加入一个父类的参数 source,表示事件的来源。source 参数传入事件来源,事件发生的对象,比如this。
public class MyEvent extends ApplicationEvent {
private String name;
private String orderId;
public MyEvent(Object source, String name, String orderId) {
super(source);
this.name = name;
this.orderId = orderId;
}
//自行添加 getter()、setter()等方法。此处忽略
}
订阅事件
通过 @EventListener 订阅事件,对事件进行监听。
@Async 注解进行异步处理。
@Slf4j
@Component
public class MyEventListener {
@Async
@EventListener(MyEvent.class)
public void listener(MyEvent event) {
log.info("listener event start");
//执行事件对应的业务逻辑
log.info("do something.");
}
}
发布事件:
通过 ApplicationEventPublisher 发布事件。
发布事件后,就会自动触发事件监听的逻辑。
@Service
public class EventPublisherService {
@Resource
private ApplicationEventPublisher publisher;
public void doSomething() {
//其他业务逻辑
//发布事件
//使用时传入事件来源,事件发生的对象,比如this
MyEvent event = new MyEvent(this, "orderQueue", "12345");
event.setName("orderQueue");
publisher.publishEvent(event);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2019-10-16 《Mysql技术内幕》读书笔记
2017-10-16 jQuery总结