文档章节

Guava之EventBus

Mr_Qi
 Mr_Qi
发布于 08/09 18:54
字数 613
阅读 630
收藏 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

粉丝 276
博文 356
码字总数 365332
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

Synchronize和ReentrantLock区别

目录介绍 1.Synchronize和ReentrantLock区别 1.1 相似点 1.2 区别 1.3 什么是线程安全问题?如何理解 1.4 线程安全需要保证几个基本特性 2.Synchronize在编译时如何实现锁机制 3.ReentrantL...

潇湘剑雨
33分钟前
1
0
ModelMap的用法

ModelMap的用法 ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可,他的作用类似于request对象的setAttribute方法的作用,用...

DemonsI
43分钟前
1
0
Hibernate环境搭建过程

B站Hibernate教学视频原网址 下边代码是照着视频一步步写出来的。由于没有视频中老师所写的文件。所以xml文件中的dtd约束是直接在网上搜到复制来的。 和视频中一样,用的MySQL数据库。数据库...

BG2KNT
45分钟前
0
0
Fragment之软件主页面制作

Fragment是一种Android 3.0后引入的API ,它出现的初衷是为了适应平板电脑的大屏幕,手机界面小巧可放下的内容有限,而平板宽阔可以放下手机上的两三个界面一起合起来展示,多个Fragment可以组...

鱼想吃肉
52分钟前
1
0
关于网站恶意注册会员

网站发生恶意注册会员,有图形验证码 ,和短信验证码 但是还是有大量恶意注册: session 和 cookie都是可以随便伪造的。 验证码有打码平台。 短信验证有短信验证平台。 IP限制有虚拟拨号/VP...

妖尾巴
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部