EventBus是Guava的事件处理机制,是设计模式中观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus使用非常简单便捷。
0.1、Guava EventBus概念:
Google guava 和 Apache commons类似,都是对java语言和类库进行增强的一个扩展库。guava是谷歌的java工程师们从日常的工作中提取出的很多高效率的方法集合。
Google guava 类库中有一个事件总线组件(EventBus),它提供的消息发布-订阅类库实现了观察者设计模式可以方便的将业务代码方便的解耦。
比如我们可以通过EventBus可以快速的在建立一个进程内消息队列的方案。
因为EventBus是维护在内存中的一个消息队列,所以不支持跨进程使用。当然,如果你需要的是一个跨进程、分布式的消息队列应该直接采用中间件(RabbitMQ、kafka等)
0.2、EventBus 相关的术语:
EventBus | 解释 | 备注 |
---|---|---|
事件(消息) | 向事件总线发布的对象 | 通常是一个类,不同的消息事件用不同的类来代替,消息内容就是类里面的属性 |
订阅 | 向事件总线注册监听者以接受事件的行为 | EventBus.register(Object),参数就是监听者 |
监听者 | 提供一个处理方法,希望接受和处理事件的对象 | 通常也是一个类,里面有消息的处理方法 |
处理方法 | 监听者提供的公共方法,事件总线使用该方法向监听者发送事件;该方法应该用Subscribe注解 | 监听者里面添加了Subscribe注解的方法,就可以认为是消息的处理方法 |
发布消息 | 通过事件总线向所有匹配的监听者提供事件 | EventBus.post(Object) |
0.3、创建事件总线流程
创建一个新的事件总线的处理流程类为:
1、选择或者创建一个事件消息类
2、创建一个事件监听类
3、如果需要使用异步事件总线,则需要创建一个Executor对象(如:线程池)
4、新建一个事件处理总线(EventBus、AsyncEventBus)
5、注册事件监听者
6、发送事件消息
7、接收事件并处理
1、EventBus的简单使用
public class EventBus {
/**
* 创建EventBus对象, identifier为“default”
*/
public EventBus() {
this("default");
}
/**
* 创建EventBus对象, identifier就是用一个字符串来标识EventBus
*/
public EventBus(String identifier);
/**
* 创建EventBus对象,exceptionHandler是异常处理类(消息处理过程中有异常,统一处理)
* ps: identifier为“default”
*/
public