Guava之EventBus

背景

天天说解耦解耦~事实上我们还没有mq

但是我们之前通过redis来模拟过queue进行消费 代码实现Redis异步任务 Redis实现优先级队列

都是很棒的实现办法 同时关于topic我们也可以通过redis的发布订阅来实现【当然持久化topic无法实现】

但是我们有时在项目中也需要简单的消息总线进行解耦~

恰逢碰到瓜子二手车事件 来简单的介绍一下Guava的eventbus

分析

我们一直在说解耦解耦 究竟什么是耦合呢?

耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块之间越独立则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。

其实简单点说就是我们写代码不愿意吧代码写在一块~写在一块容易出现的问题比较多 而且由于依赖这个事件的越来越多也会使得这块代码越来越多

我们依赖一个消息 根据该消息就可以做各种操作【有没有想到观察者模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
事实上Guava提供了一种基于反射实现的解耦的方式EventBus【顾名思义 消息总线】
# 代码 #
首先初始化EventBus对象
![a864e42c60eef05099337902c428103ae8e.jpg][]
分别对应到同步和异步
我们在使用时需要注册一系列Listener到EventBus上 为了方便 我们自定义消息Listener类型为EventBusListener
```java
for (EventBusListener listener : listenerList) {
eventBus.register(listener);
logger.info("register {} ", listener.getClass());
}
```
那么如何使用呢?
```java
MaintainCreateEvent event = new MaintainCreateEvent();
event.setIdOwnOrg(maintainVO.getIdOwnOrg());
event.setTid(maintainVO.getPkId());
event.setBillNo(maintainVO.getBillNo());
eventbus.post(event);
```
post即可 那么对应的需要被唤醒的方法如何处理?
```java
@Subscribe
public void processCreate(MaintainCreateEvent createEvent) {
logger.info(JSON.toJSONString(createEvent));
}
```
通过注解Subscribe完成方法路由【注意根据类型】
炒鸡简单有没有

如何定义多个处理事件呢???

继续Subscribe呗