一文读懂Guava EventBus(订阅\发布事件)

💡 原文中文,约12200字,阅读约需29分钟。
📝

内容提要

EventBus通过SubscriberRegister缓存所有含有@Subscribe注解的方法,并将其维护在Subscribers中,publisher发布事件Event后,EventBus会从SubscriberRegister中查找出所有订阅此事件的Subscriber,然后让Dispatcher分发Event到每一个Subscriber,子类listener注册,父类listener也会注册,如果作为参数的Event有继承关系,使用EventBus发布Event时,Event父类的监听者也会对Event进行处理。EventBus有三种Dispatcher,但不支持事务、设置订阅者消费顺序、消息过滤,SpringEvent支持消息过滤,但复杂程度较高。

🎯

关键要点

  • EventBus通过SubscriberRegister缓存所有含有@Subscribe注解的方法,并维护在Subscribers中。
  • EventBus发布事件后,会从SubscriberRegister中查找所有订阅此事件的Subscriber,并由Dispatcher分发事件。
  • EventBus有三种Dispatcher,但不支持事务、设置订阅者消费顺序和消息过滤。
  • EventBus的使用分为五个部分:简述、原理解析、使用指导、注意事项和项目中遇到的问题。
  • EventBus支持同步和异步执行,EventBus是同步的,而AsyncEventBus是异步的。
  • DeadEvent用于处理没有订阅者的事件,可以帮助调试和日志记录。
  • Subscriber的唯一标识是方法名和入参,确保不会重复注册。
  • 在使用@PostConstruct注解注册Listener时,子类会执行父类的注册方法,可能导致父类的订阅方法被注册多次。
  • EventBus不支持事务和消息过滤,SpringEvent支持消息过滤但复杂度较高。
  • 在项目中使用EventBus时需注意事件的发布顺序和处理逻辑,以避免重复消息发送。
➡️

继续阅读