美文网首页
发布订阅 - 解决实现注册的同时发送短信通知

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

作者: flyjar | 来源:发表于2022-06-28 13:58 被阅读0次
    简单实用(目标是注册的同时发送短信通知)

    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));
    
             /**
             * 省略一系列业务操作
             */
        }
    }
    

    相关文章

      网友评论

          本文标题:发布订阅 - 解决实现注册的同时发送短信通知

          本文链接:https://www.haomeiwen.com/subject/fliavrtx.html