1、创建业务相关的 Event 事件
public class UserRegisterEvent extends ApplicationEvent { private final String userName; public UserRegisterEvent(String userName) { super(userName); this.userName = userName; } public String getUserName() { return userName; } }
2、定义不同的监听器(观察者)
@Service @Async public class UserRegisterListener implements ApplicationListener{ @Resource private SmsService smsService; @Override public void onApplicationEvent(UserRegisterEvent userRegisterEvent) { SmsMessage message = SmsMessage.builder().mobile(SmsConstant.ADMIN_MOBILE) .type(SmsMessage.SMS_TYPE.SMS_USER_REGISTER) .userName(userRegisterEvent.getUserName()) .build(); smsService.sendSmsMessage(message); } }
3、通过publishEvent 发布事件
@PostMapping("/register") public CommonResultregister(String mobile, String code) { // 用户注册逻辑 sysUserService.save(user); // 发布注册事件 eventPublisher.publishEvent(new UserRegisterEvent(mobile)); return new CommonResult<>(CommonResultEmnu.OK); }
@Resource private ApplicationEventPublisher eventPublisher;
4、异步执行
如果需要异步执行,可以在具体 Listener 实现类上添加 @Async 注解,同时Application主类也需要添加@EnableAsync注解
@Async public class MyListener{ }
@EnableAsync public class MyApplication { }
5、多个观察者顺序消费
可以通过@Order注解,实现多个观察者顺序消费,order的值越小,优先级越高
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)