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 2023-10-16 21:26  乐之者v  阅读(524)  评论(0编辑  收藏  举报

导航