序言
在开发中,有时候会使用到发布订阅模式,之前一直以为只要MQ才能实现,后来了解到Spring也可以通过自己的Event事件来实现发布订阅,相比MQ功能会弱很多,但是也会相对简单很多。
Spring原生的使用方式,有兴趣的小伙伴可以研究一下。实际开发可以使用Guava的EventBus以及org.greenrobot的EventBus,两者名字相同,功能也很相似,我使用的后者greenrobot。
学习过程中踩的坑:
- 依赖分不清:各种博客都在说guava的EventBus是多么的厉害,但是使用的依赖却不是guava的;
- 功能讲不清:原谅小白的我确实再翻遍了各种博客后更加懵逼,大部分实现我都是去官网上看了事例才明白的。
1、添加依赖
1 | <dependency> |
2、文档资料
传送门:eventbus文档
小提示:英文网站,可以使用谷歌浏览器翻译,基本误差不大。
3、使用
3.1 配置EventBus
1 |
|
3.2 定义事件
1 | // 定义事件,使用普通的POJO即可,这里之所以定义两个pojo,并且字段名一样。 |
3.3 准备订阅者
订阅者实现事件处理方法(也称为“订阅者方法”),在事件发布时将被调用。这些通过@Subscribe注释定义。
注意,使用EventBus 3可以自由选择方法名称(没有像EventBus 2那样的命名约定)。
1 |
|
1 |
|
3.4 注册或注销总线
用户也需要注册自己和注销从总线。只有在注册订户时,他们才会收到事件。
1 |
|
3.5 发布活动
主要是调用上一步的eventPost方法,现在模拟一个接口来调用:
1 |
|
运行结果
接收到登录消息++发送邮件,email=1111@qq.com, goodsName=Java实战1111== 2020-12-20T17:38:54.844
接收到登录消息++发送短信,telePhone=22222222, goodsName=Java实战1111== 2020-12-20T17:38:57.845
分发消息完成
分发消息完成
接收到订单消息–发送邮件,email=742457@qq.com, goodsName=Java实战== 2020-12-20T17:39:00.860
接收到订单消息–发送短信,telePhone=13751528565, goodsName=Java实战== 2020-12-20T17:39:00.860
可以看出使用了异步注解@Subscribe(threadMode = ThreadMode.ASYNC)
的Order事件执行更加高效。
4、结尾
更多操作可参考开头的官网,带你领略事件驱动的更多方式。
- 本文作者: tenyears
- 本文链接: https://tenyears94.gitee.io/2020/12/20/SpringBoot整合EventBus事件驱动/
- 版权声明: 本博客所有文章转载请注明出处!