Guava EventBus是Google Guava库提供的一个事件总线(Event Bus)实现,它允许应用程序中的不同组件之间通过事件进行解耦通信。EventBus遵循观察者模式,事件发布者不需要知道哪些组件订阅了事件,而事件订阅者也不需要知道事件是由哪个组件发布的。 2. Guava EventBus如何实现异步事件处理 Guava EventBus通过AsyncEventBus类...
EventBus的dispatcher为PerThreadQueuedDispatcher。其dispatch方法如下: dispatchEvent的实现如下: 因此,整个执行过程如下: 整个过程都是同步方式执行,因此,EventBus是同步的。 AsyncEventBus的dispatcher为LegacyAsyncDispatcher,executor为自己指定的线程池。运行流程如下: 虚线为线程池异步调度,因此,AsyncEventBus为异步方式。
2.写一个EventBus的@Bean,全局总线; 1 2 3 4 5 @Bean public EventBus eventBus() { // return new EventBus(); 同步的 return new AsyncEventBus(ThreadPoolUtil.executorAsyncEvent); // 异步的 } 3.写一个EventListener的@Component类, 通过@PostConstruct初始化时注册. 然后写诺干个@Subscribe注解的...
EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。 Observer模式是比较常用的设计模式之一,虽然有时候在具体代码里,它不一定叫这个名字,比如改头换面叫个Listener,但模式...
意思是说AsyncEventBus就是EventBus,只不过AsyncEventBus使用你指定的线程池(不指定使用默认线程池)去分发事件(Event),并且是异步进行的。 **AsyncEventBus总结** - 1.异步执行,事件发送方异步发出事件,不会等待事件消费方是否收到,直接执行自己后面的代码。
EventBus是在单体架构内实现松耦合的一种很好的手段,通过它可以实现与业务逻辑无关的事件监听和消费。Guava提供的事件总线EventBus分为两种:1、同步事件EventBus,主要用于单线程环境;2、异步事件AsyncEventBus,主要用于多线程环境。可以稍稍回顾一下观察者模式。在支付系统的设计模式中,当完成交易后,需要给用户发送...
为什么要在方法subscribe上加上注解AllowConcurrentEvents,加上这个才能达到真正的异步,这要看底层源码,下面我们会来分析。 2、register方法底层实现 AsyncEventBus的构造方法如下List-2.1所示 List-2.1 代码语言:javascript 复制 publicAsyncEventBus(Executor executor){super("default",executor,Dispatcher.legacyAsync(),Lo...
Guava EventBus 的作用 个人对EventBus的理解是: 它是一个事件(消息)发布订阅框架,在我们的应用中可以处理一些异步任务。先通过代码来看下它的简单用法: packagenet.leokong.test;importcom.google.common.eventbus.EventBus;importcom.google.common.eventbus.Subscribe;/** ...
一个是greenrobot的Event Bus,一个是google的guava Event Bus。今天谈论的并非2套Event Bus的原理以及不同之处,这些内容基本在网上都有參考,临时不在这里累赘介绍了。等有时间深入研究的时候能够再写一遍具体的Event Bus的介绍。这次基本的是介绍2套Event Bus的异步实现,网上中文页面搜索基本非常少有Event Bus异步的...
EventBus:这个类的作用有两个,一个是作为一个总线通道,另一个作用是消息的广播。 AsyncEventBus:异步的EventBus,功能与EventBus类似,只不过实现方式有所差异。 Subscriber:可以按照字面理解是订阅者,也可以说是监听器。 SubscriberRegistry:订阅注册表。主要存储的是Subcriber和Event之间的关系,用于消息分发时可以迅速根...