首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何配置Guava EventBus Dispatcher?

Guava EventBus是一个事件总线库,用于在应用程序内部的组件之间进行解耦的事件通信。Dispatcher是EventBus的一个重要组件,用于将事件分发给订阅者。

要配置Guava EventBus Dispatcher,需要以下步骤:

  1. 导入Guava库:首先,确保项目中已经导入了Guava库。可以通过在项目的构建文件(如pom.xml或build.gradle)中添加相应的依赖来实现。
  2. 创建EventBus实例:在代码中创建EventBus实例,可以使用默认的构造函数创建一个简单的实例,也可以使用自定义的Executor来创建一个带有自定义线程池的实例。
代码语言:txt
复制
EventBus eventBus = new EventBus(); // 创建一个简单的EventBus实例

或者

代码语言:txt
复制
Executor executor = Executors.newFixedThreadPool(10); // 创建一个自定义线程池
EventBus eventBus = new AsyncEventBus(executor); // 使用自定义线程池创建EventBus实例
  1. 创建订阅者:创建一个类作为订阅者,该类需要包含一个或多个用@Subscribe注解标记的方法,这些方法将处理接收到的事件。
代码语言:txt
复制
public class MySubscriber {
    @Subscribe
    public void handleEvent(MyEvent event) {
        // 处理接收到的事件
    }
}
  1. 注册订阅者:将订阅者注册到EventBus实例中,以便接收事件。
代码语言:txt
复制
MySubscriber subscriber = new MySubscriber();
eventBus.register(subscriber);
  1. 发布事件:使用EventBus实例发布事件,所有已注册的订阅者将会接收到该事件。
代码语言:txt
复制
MyEvent event = new MyEvent();
eventBus.post(event);
  1. 配置Dispatcher:Guava EventBus提供了几种不同的Dispatcher实现,用于控制事件的分发方式。可以根据需求选择合适的Dispatcher。
  • DirectExecutor:直接在发布事件的线程中调用订阅者的方法,不进行多线程处理。
  • PerThreadQueueDispatcher:为每个线程创建一个队列,将事件按照线程进行分发。
  • ImmediateDispatcher:立即在发布事件的线程中调用订阅者的方法,但是使用线程池来处理订阅者方法的执行。
  • SerializingDispatcher:使用单个线程按顺序分发事件给订阅者。

要配置Dispatcher,可以在创建EventBus实例时传入相应的Dispatcher实现。

代码语言:txt
复制
EventBus eventBus = new EventBus(new DirectExecutor()); // 使用DirectExecutor作为Dispatcher

或者

代码语言:txt
复制
EventBus eventBus = new EventBus(new PerThreadQueueDispatcher()); // 使用PerThreadQueueDispatcher作为Dispatcher
  1. 取消注册订阅者:如果不再需要某个订阅者接收事件,可以将其从EventBus实例中取消注册。
代码语言:txt
复制
eventBus.unregister(subscriber);

以上是配置Guava EventBus Dispatcher的基本步骤。根据具体的应用场景和需求,可以选择合适的Dispatcher实现来优化事件的分发方式。腾讯云没有直接相关的产品和产品介绍链接地址,但可以在腾讯云的云计算文档中了解更多关于云计算的知识和技术。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Guava - EventBus(事件总线)

Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们的模块和领域边界很好的解耦设计。...不再多的废话,直奔Guava EventBus主题。...首先Guava为我们提供了同步事件EventBus和异步实现AsyncEventBus两个事件总线,他们都不是单例的,官方理由是并不想我们我们的使用方式。...订阅 首先EventBus为我们提供了register方法来订阅事件,Guava在这里的实现很友好,我们不需要实现任何的额外接口或者base类,只需要在订阅方法上标注上@Subscribe和保证只有一个输入参数的方法就可以搞定...正在这里对于Guava对于事件的发布,是依据上例中订阅方法的方法参数类型决定的,换而言之就是post传入的类型和其基类类型可以收到此事件。

1.4K20
  • EventBus原理深度解析(Guava)

    二、框架解析 2.1、组织结构 eventbus的组织结构如下: ? eventbus主要有以下几部分组成: 1、eventbus、asyncEventBus:事件发送器。...4、Dispatcher:事件分发器,将事件的订阅者调用来执行。 5、Subscriber、SynchronizedSubscriber:订阅者,并发订阅还是同步订阅。...EventBus的dispatcher为PerThreadQueuedDispatcher。其dispatch方法如下: ? dispatchEvent的实现如下: ? 因此,整个执行过程如下: ?...整个过程都是同步方式执行,因此,EventBus是同步的。 AsyncEventBus的dispatcher为LegacyAsyncDispatcher,executor为自己指定的线程池。...2、本文用到的guava版本如下: ? 作者:yangjianzhou https://my.oschina.net/yangjianzhou/blog/2208677 【推荐阅读】

    4.6K31

    观察者模式实战:真实项目中屡试不爽的瓜娃EventBus到底如何实现观察者模式的?

    业务代码示例 这里使用的是Guava中自带的EventBus组件,我们继续用取消订单业务场景做示例,这里抽离了部分代码,只展示核心的一些代码: 1....异步AsyncEventBus配置: /**  * AsyncEventBus 线程池配置  *  * @author wangmeng  * @date 2020/04/14  */ @Configuration...我们使用的是AsyncEventBus,其中指定的事件转发器是:LegacyAsyncDispatcher,接着看看其中的dispatch()方法的实现: com.google.common.eventbus.Dispatcher.LegacyAsyncDispatcher...在我们执行register()方法的时候,会为每一个订阅者构造一个Subscriber对象,如果配置了@AllowConcurrentEvents注解,就会为它配置一个允许并发的Subscriber对象...总结 这里主要是整理了guava 中实现观察者模式的使用及原理。 大家如果有类似的业务场景也可以使用到自己项目中。

    1.2K10

    事件驱动编程

    五 Guava事件总线 EventBus是谷歌开源的实现事件驱动编程的事件总线,并且提供了基于注解的编码方式,对于需要实现应用内业务解耦的场景,是一个不错的选择,常用的有有两个类和一个注解:EventBus...EventBus 事件总线,封装了监听器容器和事件发布逻辑 AsyncEventBus 是EventBus的异步实现,大部分场景业务解耦之后,监听器的执行结果不影响事件发布者的主逻辑,使用异步事件总线后开启新线程执行监听器逻辑...来做异步化 2.原理 guava时间总线的核心类就是EventBus,我们剪取我们用到的方法看一下其实现: public class EventBus { private static final...dispatcher; public EventBus() { this("default"); } public EventBus(String identifier) {...是事件派发器,我们看一下构造器和方法: 构造器: EventBus( String identifier, Executor executor, Dispatcher dispatcher,

    1.8K40

    初探Google Guava

    所以guava在程序性能优化上下了不少的工夫,我们称其为单块架构的利器 我认为强大的有几点:1.集合处理   2.EventBus消息总线处理  3.guava cache 单机缓存处理  4.并发listenableFutrue...反射[Reflection] Guava 的 Java 反射机制工具类 1.Guava EventBus探讨 在设计模式中, 有一种叫做发布/订阅模式, 即某事件被发布, 订阅该事件的角色将自动更新。...首先单块架构就是在一个进程内, 在一个进程内, 我们还是希望模块与模块之间(功能与功能之间)是松耦合的,而在一个模块中是高度内聚的, 如何降低一定的耦合, 使得代码更加有结构, guava eventbus...web端发送推送, 如何发送短信。...如何实现 先来讲同步, 即订阅者收到事件后依次执行, 下面都是伪代码, 具体的入库细节等我在这里不提供。

    1.1K20

    【死磕Sharding-jdbc】---路由&执行

    com.dangdang.ddframe.rdb.sharding.example.jdbc.Main为基础,剖析分库分表简单查询SQL实现–printSimpleSelect(dataSource);,即如何执行简单的查询...; 单表查询之路由 接下来分析下面这段代码是如何取得路由信息的: Collection preparedStatementUnits = route();...SimpleRoutingEngine.route()源码如下: @Override public RoutingResult route() { // 根据逻辑表得到tableRule,逻辑表为t_order;表规则的配置为...说明:EventBus是google-guava提供的消息发布-订阅类库; google-guava的EventBus正确打开姿势: 发布事务:调用EventBus的post()–sharding-jdbc...().register(new BestEffortsDeliveryListener()); EventBusInstance源码如下–EventBus全类名为com.google.common.eventbus.EventBus

    92430

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券