Guava事件总线——全文检索

本文介绍Guava事件总线(EventBus)的原理与应用,通过一个全文检索案例展示了如何利用EventBus降低模块间的耦合度,提高系统的可维护性。

一、介绍
Guava事件总线实际上是一个“观察者-监听者”实现,通过使用弱引用的方式将各个模块关联起来,下面这几个帖子将EventBus讲解的非常详细,如不是很了解,请移步:

通过EventBus我们可以解决模块间相互耦合,相互依赖,从而达到低耦合便于维护的目的。



二、案例分析——全文检索
以将任务信息添加到全文检索的应用为例

Created with Raphaël 2.1.2 任务信息添加到全文检索 Task Task Index Index Lucene Lucene 我要将T1添加到全文检索中[id, 30] 你记得将T1索引下 我来取下T1的基本信息,记得封装成IndexInfo对象 给你封装了,去死吧!

1. 现在情况
我们现在是通过在任务模块中实现接口IndexEnable,并在需要索引的时候直接调用IndexManager触发索引的过程,故两个模块的依赖方式为:

Created with Raphaël 2.1.2 任务模块 任务模块 全文检索 全文检索 我想当老大 我才是真正的老大 我并不想依赖你

对于任务模块: 我只关注任务信息的生产(黑盒),对于你是否有全文索引,希望并不要影响我。
对于全文检索: 我才是消费者,当时我通过让你们依赖我(锅全给大家啦),我反而成了规则制定者啦.

2. 理想状态
以将任务信息添加到全文检索的应用为例

Created with Raphaël 2.1.2 任务信息添加到全文检索 TASK TASK EventBus EventBus Index Index Lucene Lucene 我将任务T1新增事件发给事件总线 事件总线查找监听者(全文检索) 我想取到T1的信息 这是你想要的信息 开始加工全文检索吧

为什么要改为这样? 我的观点已经在前面阐述,再此再做说明,全文检索是消费者,任务模块是生产者,任务模块是否有全文检索并不影响其正常使用。
这样我们的架构图变为如下

Created with Raphaël 2.1.2 任务模块 任务模块 EventBus EventBus 全文检索 全文检索 依赖 依赖 依赖

从此全文检索变为建立在各个业务模块基础之上的一个新模块,那如何让我们的EventBus来实现呢。



三、具体实现
参考前面提供的例子,内部代码不做例子展示, 本示例的业务场景与前面讨论基本是一样的

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值