转 Guava之EventBus
1267 | 1 | 0
背景
天天说解耦解耦~事实上我们还没有mq
但是我们之前通过redis来模拟过queue进行消费 代码实现Redis异步任务 Redis实现优先级队列
都是很棒的实现办法 同时关于topic我们也可以通过redis的发布订阅来实现【当然持久化topic无法实现】
但是我们有时在项目中也需要简单的消息总线进行解耦~
恰逢碰到瓜子二手车事件 来简单的介绍一下Guava的eventbus
分析
我们一直在说解耦解耦 究竟什么是耦合呢?
耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块之间越独立则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。
其实简单点说就是我们写代码不愿意吧代码写在一块~写在一块容易出现的问题比较多 而且由于依赖这个事件的越来越多也会使得这块代码越来越多
我们依赖一个消息 根据该消息就可以做各种操作【有没有想到观察者模式~~~】
事实上Guava提供了一种基于反射实现的解耦的方式EventBus【顾名思义 消息总线】
代码
首先初始化EventBus对象
分别对应到同步和异步
我们在使用时需要注册一系列Listener到EventBus上 为了方便 我们自定义消息Listener类型为EventBusListener
for (EventBusListener listener : listenerList) { eventBus.register(listener); logger.info("register {} ", listener.getClass()); }
那么如何使用呢?
MaintainCreateEvent event = new MaintainCreateEvent(); event.setIdOwnOrg(maintainVO.getIdOwnOrg()); event.setTid(maintainVO.getPkId()); event.setBillNo(maintainVO.getBillNo()); eventbus.post(event);
post即可 那么对应的需要被唤醒的方法如何处理?
@Subscribe public void processCreate(MaintainCreateEvent createEvent) { logger.info(JSON.toJSONString(createEvent)); }
通过注解Subscribe完成方法路由【注意根据类型】
炒鸡简单有没有~~~
如何定义多个处理事件呢???
继续Subscribe呗
文章来源:https://my.oschina.net/qixiaobo025/blog/1925266
推荐阅读:https://www.roncoo.com/course/view/894fec2b0fdd441ea725d4c4b2d24f0c
0
314****@qq.com 2018-08-12 02:57:09
314****@qq.com
asdfsdfa
314****@qq.com
asdfasf
199****9888
7人已关注
领课教育 32101
9919
update 47194
4983
领课教育 18069
husheng 20977
请更新代码 41634
凯哥Java 2239
凯哥Java 2620
凯哥Java 2007