文档章节

Guava之EventBus

Mr_Qi
 Mr_Qi
发布于 08/09 18:54
字数 613
阅读 649
收藏 11

背景

天天说解耦解耦~事实上我们还没有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呗

© 著作权归作者所有

共有 人打赏支持
Mr_Qi

Mr_Qi

粉丝 280
博文 359
码字总数 369228
作品 0
南京
程序员
私信 提问
加载中

评论(3)

银杏果果
银杏果果

引用来自“Mr_Qi”的评论

引用来自“节节草”的评论

我自己写的事件通知框架比这个还强大些哈哈

可以分享出来看看啊
暂时不了,这个是我的框架核心,暂时没有分享的计划,不过我是根据PureMvc框架改的,再结合自己写的一个类扫描工具自动注册事件
Mr_Qi
Mr_Qi

引用来自“节节草”的评论

我自己写的事件通知框架比这个还强大些哈哈

可以分享出来看看啊
银杏果果
银杏果果
我自己写的事件通知框架比这个还强大些哈哈
Guava库学习:学习Guava EventBus(一)EventBus

在软件开发过程中,对象信息的分享以及相互直接的协作是必须的,困难在于确保对象之间的沟通是有效完成的,而不是拥有成本高度耦合的组件。当对象对其他组件的责任有太多的细节时,它被认为是...

Realfighter
2014/12/29
0
0
为JFinal添加event消息事件

在之前使用spring mvc的时候,在复杂的下单和支付中有一部分功能使用的Spring事件驱动模型去完成!具体优点不啰嗦了,发现涛哥有篇文章讲得比较详细:[详解Spring事件驱动模型][1] 最初准备基...

如梦技术
2015/04/28
0
20
Android EventBus二三事

废话很多的前言 EventBus,也即事件总线。在[wiki][event_monitor]上有关于Event Monitor的一个说法: Event monitoring makes use of a logical bus to transport event occurrences from so......

苦辛味
2014/09/21
0
0
guava eventbus源码解析

说在前面 本文转自“天河聊技术”微信公众号 事件驱动模型设计是一种优雅的程序设计方式,实现有很多,原理都是发布与订阅,观察者设计模式实现,java自带的实现、spring ioc的事件驱动模型,...

天河2018
07/07
0
0
走近Guava(六): 事件总线EventBus

EventBus: 创建EventBus实例: EventBus eventBus = new EventBus();//或者EventBus eventBus = new EventBus(TradeAccountEvent.class.getName());//带标识符,用于日志记录 订阅事件: 模拟......

ihaolin
2014/04/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 钱不还,我就当你人不在了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享Bigleaf的单曲《小鹿》 《小鹿》- Bigleaf 手机党少年们想听歌,请使劲儿戳(这里) 周日在家做什么? 做手工呀, @poorfis...

小小编辑
今天
24
3
EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
17
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
23
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
28
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部