springBoot实现发布订阅

应用场景:

在开发中,有时需要监听某些事件,在事件触发时,执行相应的逻辑。

也可以说是基于事件驱动的观察者模式。

比如当点击某个按钮时,触发相应的功能,或者用户下单通知等等。

SpringBoot 可以通过 ApplicationEvent 、ApplicationEventPublisher、@EventListener 实现事件的发布订阅。

Event事件

继承 ApplicationEvent,定义 Event事件。

public class MyEvent extends ApplicationEvent  {

    private String name;

    private String 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() {
        //其他业务逻辑

        //发布事件
        MyEvent event = new MyEvent();
        event.setName("order");
        publisher.publishEvent(event);
    }

}

你可能感兴趣的:(SpringBoot,spring,boot,java)