Spring:ApplicationEventPublisher事件发布与监听

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

一、概述

Spring的事件机制是观察者模式的典型,跟发布订阅模式也十分接近,被观察者发布事件,观察者监听到事件,然后处理事件。这个模式的应用场景有用户注册等,比如用户注册后需要给用户发送优惠券,这时用户注册就是被观察者,事件是发送优惠券。

二、实现

1、事件

首先需要定义事件,继承ApplicationEvent类

public class OrderStateEvent extends ApplicationEvent {
	public OrderStateEvent(OrderStateEventSource source) {
		super(source);
	}
}
2、观察者

使用@EventListener注解,监听ApplicationEventPublisher发布的事件。

@Slf4j
@Configuration
public class OrderStateEventListener {
  
    /**
     * 订单状态事件
     */
    //使用异步注解
    @Async
    @EventListener({OrderStateEvent.class})
    public void processOrderStateEvent(OrderStateEvent event) {
        OrderStateEventSource source = (OrderStateEventSource) event.getSource();
        //省略
        ...
}
3、被观察者

在需要发布事件的服务里,使用ApplicationEventPublisher发布事件。

//提交订单发布事件
public String submitOrder(OrderSubmitRequest orderSubmitRequest) {
...
//发送消息
applicationEventPublisher.publishEvent(new OrderStateEvent());
}

注意:如果在处理事件中发生异常,导致事件没有被处理成功,需要有补偿机制,比如记录在数据库中,再次处理,或者存到redis中,再次处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值