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

}

posted on   乐之者v  阅读(893)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2019-10-16 《Mysql技术内幕》读书笔记
2017-10-16 jQuery总结
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示