发布订阅 - 解决实现注册的同时发送短信通知
2022-06-28 本文已影响0人
flyjar
简单实用(目标是注册的同时发送短信通知)
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));
/**
* 省略一系列业务操作
*/
}
}