发布订阅 - 解决实现注册的同时发送短信通知

简单实用(目标是注册的同时发送短信通知)

1、开启异步支持

/**
* 开启异步支持,如果不想这样配置的话,可以直接在 启动类上加@EnableAsync注解。使用默认的异步线程池
  */
  @Configuration
  @EnableAsync
  public class AsyncEventConfiguration implements AsyncConfigurer {
  @Override
  public Executor getAsyncExecutor() {
  // 这里只是测试,正常应该自己创建线程池
  return Executors.newFixedThreadPool(10);
  }
  }

2、定义个被监听的元素

/**
 * 定义个被监听的元素
 * @author jarfly
 */
@Data
@AllArgsConstructor
public class UserEvent {
    /**
     * 用户信息
     */
    private final User user;

}

3、定义监听事件

/**
 * 发送短信的操作
 *
 * @author jarfly
 */
@Component
@AllArgsConstructor
public class UserEventListener {

   // 上面有个全参构造方法自动就把SendSmsService注入进来了
   private final SendSmsService sendSmsService;
    
    /**
     *  异步监听
     */
    @Async
    @EventListener(UserEvent.class)
    public void defaultSubmitOrderListener(UserEvent event) {
           /**
         * 省略一系列业务操作
         */
          //调用发送短信的方法
           sendSmsService.sendSms(event.getPhone());
  }
}

4、发布事件

@Service
public class UserServiceImpl  implements UseService {
    
     //也可以使用ApplicationContext,ApplicationContext继承了ApplicationEventPublisher
    @Autowired
    private ApplicationEventPublisher eventPublisher;


    @Override
    @Transactional(rollbackFor = Exception.class)
    public void registerUser(User user) {
    
        /**
         * 省略一系列业务操作
         */
        //发布发送短信的事件
        eventPublisher.publishEvent(new UserEvent(user));

         /**
         * 省略一系列业务操作
         */
    }
}

你可能感兴趣的:(发布订阅 - 解决实现注册的同时发送短信通知)