spring事件框架ApplicationEventPublisher入门
1、事件机制的场景
一个简单的场景,就是用户注册成功后,发短信通知和发邮件通知,其实这样的场景就是两种处理情况
注册成功后起一个线程执行发短信和发邮件通知
发送用户ID到mq,然后mq去执行
正规的话这种耗时的操作应该是使用MQ,但是使用MQ其实无形之间就增加了系统的复杂性,那么此时可以使用ApplicationEventPublisher代替MQ
2、事件发布者
public interface SmsSend {
void sendCode(String tel, String code);
}
@Component
public class SmsSendImpl implements SmsSend {
@Autowired private ApplicationEventPublisher applicationEventPublisher;
@Override
public void sendCode(String tel, String code) {
CodeDTO codeDTO = new CodeDTO();
codeDTO.setTel(tel);
codeDTO.setCode(code);
System.out.println("11111");
applicationEventPublisher.publishEvent(codeDTO);
}
}
- 核心是通过ApplicationEventPublisher进行事件的发布
3、事件订阅者
@Component
public class SmsEventHandler {
@Async
@EventListener
public void handle(CodeDTO codeDTO) {
try {
System.out.println("mmmmm");
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
@Async
@EventListener
public void handNone(CodeDTO code) {
System.out.println("mmmm");
}
}
- 用EventListener来标识订阅者。根据形参来匹配事件。
- @Async可以开启,需要开启@EnableAsync来支持
4、demo测试
@SpringBootTest
public class EventHandleTest {
@Autowired private SmsSend smsSend;
@Test
public void test() {
smsSend.sendCode("111", "22");
}
}
控制台输出
11111
mmmmm
mmmm
正文到此结束