Guava事件总线——全文检索

【Guava】EventBus、AsyncEventBus详解及使用案例 EventBus顾名思义,事件总线,是一个轻量级的发布/订阅模式的应用模式。相比于MQ更加简洁,轻量,它可以在一个小系统模块内部使用。如果你也对EventBus感兴趣,或者想知道什么是EventBus,那就跟我一起来吧,后面会手把手教你使用EventBus,接下来就跟我一起走进EventBus吧。 一、EventBus的介绍和使用场景 EventBus是google的Guava库中... 阅读详情

一、介绍
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来实现呢。



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

Guava EventBus(事件总线) EventBus是Guava的事件处理机制,是设计模式中观察者模式(生产/消费者编程模型)的优雅实现。 阅读详情

相关推荐

google guava源码剖析

一、引言
 都说java是开源的,但是除了JDK外,能坚持更新且被广泛认可的开源jar包实在是不可多得。其中最显眼的自然是guava了,背靠google自然底气十足,今天就来解开guava的面纱,初探一下这个美妙的家伙。
 附上自学guava网址:官方github  本文以guava-22.0.jar为源码分析。
 二、概述
 1.包名速读 &#13...

博客园搬家测试账号 1606

Guava异步事件总线AsyncEventBus的注解AllowConcurrentEvents分析

Guava提供了EventBus事件总线工具,可以很方便的创建观察者模式,基本使用请参考如下链接  http://www.cnblogs.com/peida/p/EventBus.html。 在设置观察者时,需要使用注解类@Subscribe来标识一个订阅者,但在注解中还要一个注解@AllowConcurrentEvents,这个注解是用来标识当前订阅者是线程安全的,那Guava内部是如何实现的...

编程战五渣 5126

Guava事件总线EventBus阻塞行为解读

google guava库的事件总线组件EventBus,是观察者模式(进程内事件发布/订阅)的一个比较优雅的实现。之前项目一直没什么机会使用(之前事件解耦多用消息中间件),最近自个儿摸索DDD,在进程内领域事件的实现时,采用了EventBus,总体使用比较顺利,其提供的api也比较简单,在这里就不详诉使用方式了。今天就如标题所说,谈谈EventBus post事件时的阻塞行为。 具体遇到的令我困惑的行为是,在不同线程里post事件,貌似也会相互阻塞。以下是实验代码: public static void

u014249527的博客 1912

异步调用

场景 串行调用:在某个调用中,需要顺序调用 A, B, C三个过程方法,且是同步调用,则需要将三个方法都顺序执行完毕之后,整个调用过程执行完毕 异步调用:上述场景中,若B为一个异步的调用方法,则在执行完A之后,调用B,并不等待B完成,而是开始调用C,待C执行完毕之后,就意味着这个过程执行完毕了,不需要等待B方法的处理结果 方案 方案一:Java Future、ThreadP

聚焦AI技术前沿,深度解析大模型原理与多场景应用,探索最新突破与落地实践,助力行业洞悉趋势,驱动智能转型,赋能千行百业。 3038

Spring Boot集成Guava EventBus并注入Bean

目录前言目标事件总线介绍概览图代码实践基础类IEventBusAbstractSpringEventBusIEventConsumer业务类实现事件总线投递消息消费者 前言 基于事件总线的方式开发,可以使我们代码更加简洁,而且解耦 Guava的EventBus是个轻量级的事件总线,而且事件间可以相互隔离,所以更加灵活多变 本文不讲EventBus的具体功能,只考虑应用场景 目标 在Spring中集成Guava的EventBus,并友好的注入Bean 消费者只需要实现接口,即可接收事件消息 生产者只需要

mt23 3026

基于BS21的星闪模块设计电路SLE/BLE

基于BS21的星闪模块设计电路SLE/BLE HI2821

2503_91889531的博客 2738

Google Guava 事件总线工具使用详解

Google Guava 事件总线工具使用详解 事件总线 特点 使用 EventBus AsyncEventBus @Subscribe

骑个小蜗牛的博客 4978

阿里云人工智能工程师ACA认证免费课程学习笔记

阿里云人工智能工程师ACA认证免费课程学习笔记

engchina的专栏 2013

【实用工具】Guava EventBus(事件总线)快速入门

【实用工具】Guava EventBus(事件总线)快速入门

秋装什么的博客 664

基于8086微机原理数字钟计时器系统设计

*单片机设计介绍,基于8086微机原理数字钟计时器系统设计。

2201_75940997的博客 1279

间充质干细胞衰老机制与抗衰老干预策略研究

干细胞技术在再生医学领域具有广阔应用前景,其中间充质干细胞(MSCs)因其多向分化潜能和免疫调节特性备受关注。细胞衰老是影响干细胞治疗效果的共性难题,表现为增殖能力下降、端粒缩短等特征。通过表观遗传学分析发现,衰老MSCs存在DNA甲基化异常和组蛋白修饰改变;线粒体功能障碍导致ATP产量锐减,ROS累积显著增加。针对这些机制,研究者开发了包括小分子化合物筛选、CRISPR基因编辑和三维培养优化在内的多种干预策略。这些技术在组织修复、抗衰老治疗等应用场景中展现出重要价值,例如可提升心肌梗死修复效率2.3倍,缩

weixin_33502772的博客 227

Guava事件总线的应用与最佳实践

虽然Guava的EventBus已经很强大,但有时候你可能需要根据自己的需求进行定制。比如,你可能想要添加日志功能,或者修改事件分发的行为。让我们来看一个简单的自定义事件总线示例。@Override在这个自定义的中,小黑重写了post方法,在事件发布之前和之后添加了日志输出。

宋小黑的博客 1414

.net core 下的PostgreSQL 异常排查—— Exception while reading from stream (0x80004005)

最近以PostgreSQL为存储介质,实现了分布式缓存的一个组件开发,在经过开发环境的测试后,顺利推送到产品组的手里,经过开发环境的验证后,终于发布到测试环境了,但问题来了,产品组反应频繁出现访问异常,返回的信息大致是:Exception while reading from stream … (0x80004005) ????欢迎点赞 :???? 收藏 ⭐留言 ???? 如有错误敬请指正,赐人玫瑰,手留余香! ????本文作者:由webmote 原创,首发于 【优快云】 ????作者格言: 生活在

网尘的技术专栏 5841

Google guava 事件总线 EventBus 进程内消息队列

Google guava 事件总线 EventBus创建事件总线流程码代码引入依赖一个简单的事件处理监听者创建事件生产者总线、注册事件监听者、发送事件运行结果扩展另一个事件监听者运行结果异步事件总线运行结果 Google guava 和 Apache commons类似,都是对java语言和类库进行增强的一个扩展库。 guava的诞生是谷歌的java工程师们从日常的工作中提取出的很多高效率的方...

wangxudongx的专栏 4784

2、实时DSP编程技术及其应用

本文详细介绍了实时数字信号处理(DSP)技术及其应用,涵盖三种流行的浮点DSP处理器系列的特点、开发工具和优化方法。通过具体的应用实例,如语音压缩、音乐信号处理和雷达信号处理,展示了如何在实际项目中应用这些技术,帮助工程师提高系统的性能和可靠性。

cicd6pipeline的博客 839

SAP Group Reporting入门指南(1)--开篇及系统环境搭建

文章介绍了SAP GR的发展历程、与BPC的对比优势,数据收集的多种方式(实时同步、外部导入等)以及合并整体流程,并推出《SAP Group Reporting入门指南》专栏。

bflyfish的博客 282

Guava里一些比较常用的工具

随着java版本的更新提供了越来越多的语法和工具来简化日常开发,但是我们一般用的比较早的版本所以体验不到。这时就用到了guava这个包。guava提供了很多方便的工具方法,solar框架就依赖了版本,这里稍微介绍下。

程序猿进阶 2094

rk3399开发环境的介绍

由于Bluez的介绍文档有限,以及对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求,加上网络上其实没有一个完整的介绍Bluez系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度,学习曲线也相对较陡,所以我有了这个想法,专门对Bluez做一个系统性的介绍,尽可能的涵盖所有内容。

朝气蓬勃 710

guava_事件总线

EventBus 类解析当我们开发软件时,各个对象之间的数据共享和合作是必须的。 但是这里比较难做的是 怎样保证消息之间的传输高效并且减少各个模块之间的耦合。 当组件的职责不清楚时,一个组件还要承担另一个组件的职责,这样的系统我们就认为是高耦合。 当我们的系统变得高耦合时,任何一个小的改动都会对系统造成影响。 为了解决设计上的问题,我们设计了基于事件的设计模型。 在事件驱动编程模型中,对象可以发布/

我不是为了输赢 我就是认真 2617

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Google Guava EventBus(事件总线)

       EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus非常优雅使用起来也非常的简单,这个可不是吹的是真的非常的简单。        EventBus内部实现原理不复杂(源码不复杂,强烈推荐大家去看下)。我们简单的...

旧路 2万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Guava事件总线终极指南:解耦系统组件的最佳实践方案

Guava事件总线(EventBus)是Google Guava库提供的一个强大工具,它实现了发布-订阅模式,能够帮助开发者轻松实现组件间的解耦通信。通过事件总线,组件可以通过发布事件和订阅事件的方式进行交互,而不需要显式地相互引用,从而提高代码的可维护性和可扩展性。 ## 📌 为什么选择Guava事件总线? 在传统的组件通信方式中,组件之间通常需要显式地相互引用,这会导致代码耦合度高,难以

gitblog_00829的博客 808

guava中的事件总线(观察者模式的应用)

观察者模式:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,所有依赖它的对象都会得到通知并自动更新。 Guava框架中的EventBus(事件总线)是对观察者模式的一种实现。 EventBus是在单体架构内实现的松耦合的绝佳方式,通过它可以很简洁的实现事件注册监听和消费。 Guava框架中提供了EventBus(同步)和AsyncEventBus(异步,继承于EventBus)两种时...

以码为梦 1580

Java中的事件总线模式:使用Guava EventBus与Spring Event的对比

大家好,我是省赚客APP研发者阿可,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨一下Java中的事件总线模式,并对比两种常见的实现:Guava EventBus和Spring Event。事件总线模式是一种发布-订阅模式的实现,通过事件总线(EventBus)对象作为中介,发布者(Publisher)发布事件,订阅者(Subscriber)接收事件。Guava EventBus是Google的Guava库提供的一个轻量级事件总线实现,使用简单,能够快速集成。来管理事件的发布和订阅。

技术研究中心 709

Google Guava的EventBus(事件总线)基本使用

EventBus是Google.Guava提供的消息发布-订阅组件,采用的是观察者模式(生产/消费者编程模型), 实现了多组件之间通信的解耦合,事件产生方和事件消费方实现解耦分离,提升了通信的简洁性。 相比MQ它更加轻量,易用,但一般只用于进程内部的通信,不能像MQ一样用于分布式系统的服务与服务之间的通信。 EventBus包含3大核心部分:Event事件,Publisher事件发布者,Subscriber事件订阅者。 下面介绍一下它的使用方法: 一、...

Rookie_cc的博客 5388
上一篇: 应用设计中的希克定律
下一篇: Java中try、catch、finally语句块的执行顺序
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值