接口 EventBus


public interface EventBus
事件总线 EventBus,EventBus、业务框架、逻辑服三者是 1:1:1 的关系。

发布事件

     在发布事件时
     1. 如果相关订阅者在同进程内,可控制同步和异步发送。
     2. 如果相关订阅者不在同一个进程内,而是分布在不同的进程中,则只能异步发送(即使使用了同步的方法来发布事件)。

     这里的【同步】指的是:发布事件时,相关订阅者执行完成后,主逻辑才会继续往下走。
     这里的【异步】指的是:发布事件时,主逻辑不会阻塞,相关订阅者会在其他线程中执行。

     无论是同步或者是异步,相关订阅者在执行逻辑服时,默认是线程安全的;这是因为订阅者 EventSubscribe 默认使用的是用户线程执行器。
 

关于获取 EventBus 的相关示例

for example 1 - 通过 FlowContext 获取对应的 eventBus


 EventBus eventBus = flowContext.getEventBus();
 eventBus.fire(userLoginEventMessage);
 
 
for example 2 - 通过逻辑服 id 获取对应的 eventBus

 BrokerClientContext brokerClientContext = flowContext.getBrokerClientContext();
 String id = brokerClientContext.getId();
 EventBus eventBus = EventBusRegion.getEventBus(id);
 
 
for example 3 - 通过业务框架获取对应的 eventBus

 BarSkeleton barSkeleton = ...
 EventBus eventBus = barSkeleton.option(SkeletonAttr.eventBus);
 
 
for example 4 - 在初始化时,自己保存一下引用

 public BarSkeleton createBarSkeleton() {
     // 业务框架构建器
     var builder = ...
     // 游戏逻辑服添加 EventBusRunner,用于处理 EventBus 相关业务
     builder.addRunner(new EventBusRunner() {
         @Override
         public void registerEventBus(EventBus eventBus, BarSkeleton skeleton) {
            // 这里保存一下 EventBus 的引用
         }
     });
 }
 
 
fire 系列提供了多个种类的事件发布机制
     1. fire 发送事件给订阅者,这些订阅者包括
         a. 给当前进程所有逻辑服的订阅者发送事件消息。
         b. 给其他进程的订阅者发送事件消息。
     2. fireLocal 给当前进程所有逻辑服的订阅者发送事件消息
     3. fireMe 仅给当前 EventBus 的订阅者发送事件消息
     4. fireAny 发送事件给订阅者,这些订阅者包括
         a. 给当前进程所有逻辑服的订阅者发送事件消息。
         b. 给其他进程的订阅者发送事件消息。
         c. 当有同类型的多个逻辑服实例时,只会给同类型其中的一个逻辑服发送事件。

     fire 系列提供了多个种类的事件发布机制,以上方法默认是异步的,而相关同步方法则以 fireXXXSync 命名。
 
便捷使用 - FlowContext
     除了可以通过 EventBus 发布事件外,框架还在 FlowContext 中提供了 EventBus 的相关方法。
     FlowContext 内部使用 EventBus 来发布事件。
     更多使用示例请阅读 FlowContext - 分布式事件总线文档
 
从以下版本开始:
21
作者:
渔民小镇
另请参阅:
日期:
2023-12-24
  • 方法详细资料

    • getId

      String getId()
      EventBus id。EventBus、业务框架、逻辑服三者是 1:1:1 的关系,默认该 id 是逻辑服的 id;
      返回:
      id
    • register

      void register(Object eventBusSubscriber)
      注册订阅者
      参数:
      eventBusSubscriber - 订阅者
    • listSubscriber

      Collection<Subscriber> listSubscriber(EventBusMessage eventBusMessage)
      事件消息所对应的订阅者
      参数:
      eventBusMessage - 事件消息
      返回:
      所对应的订阅者
    • listTopic

      Set<String> listTopic()
      当前 eventBus 订阅的所有事件源主题
      返回:
      当前 eventBus 订阅的所有事件源主题
    • fire

      void fire(EventBusMessage eventBusMessage)
      [异步] 发送事件给所有订阅者
           1 给当前进程所有逻辑服的订阅者发送事件消息
           2 给其他进程的订阅者发送事件消息
       
      参数:
      eventBusMessage - 事件消息
    • fireSync

      void fireSync(EventBusMessage eventBusMessage)
      [同步] 发送事件给所有订阅者
           1 [同步] 给当前进程所有逻辑服的订阅者发送事件消息
           2 [异步] 给其他进程的订阅者发送事件消息
      
           注意,这里的同步仅指当前进程订阅者的同步,对其他进程中的订阅者无效(处理远程订阅者使用的是异步)。
       
      参数:
      eventBusMessage - 事件消息
    • fire

      default void fire(Object eventSource)
      [异步] 发送事件给所有订阅者
           1 给当前进程所有逻辑服的订阅者发送事件消息
           2 给其他进程的订阅者发送事件消息
       
      参数:
      eventSource - 事件源
    • fireSync

      default void fireSync(Object eventSource)
      [同步] 发送事件给所有订阅者
           1 [同步] 给当前进程所有逻辑服的订阅者发送事件消息
           2 [异步] 给其他进程的订阅者发送事件消息
      
           注意,这里的同步仅指当前进程订阅者的同步,对其他进程中的订阅者无效(处理远程订阅者使用的是异步)。
       
      参数:
      eventSource - 事件源
    • fireLocal

      default void fireLocal(Object eventSource)
      [异步] 给当前进程所有逻辑服的订阅者发送事件消息
      参数:
      eventSource - 事件源
    • fireLocal

      void fireLocal(EventBusMessage eventBusMessage)
      [异步] 给当前进程所有逻辑服的订阅者发送事件消息
      参数:
      eventBusMessage - 事件消息
    • fireLocalSync

      default void fireLocalSync(Object eventSource)
      [同步] 给当前进程所有逻辑服的订阅者发送事件消息
      参数:
      eventSource - 事件源
    • fireLocalSync

      void fireLocalSync(EventBusMessage eventBusMessage)
      [同步] 给当前进程所有逻辑服的订阅者发送事件消息
      参数:
      eventBusMessage - 事件消息
    • fireMe

      default void fireMe(Object eventSource)
      [异步] 仅给当前 EventBus 的订阅者发送事件消息
           已注册到 register(Object)  的订阅者
       
      参数:
      eventSource - 事件源
    • fireMe

      void fireMe(EventBusMessage eventBusMessage)
      [异步] 仅给当前 EventBus 的订阅者发送事件消息
           已注册到 register(Object)  的订阅者
       
      参数:
      eventBusMessage - 事件消息
    • fireMeSync

      default void fireMeSync(Object eventSource)
      [同步] 仅给当前 EventBus 的订阅者发送事件消息
           已注册到 register(Object) 的订阅者
       
      参数:
      eventSource - 事件源
    • fireMeSync

      void fireMeSync(EventBusMessage eventBusMessage)
      [同步] 仅给当前 EventBus 的订阅者发送事件消息
           已注册到 register(Object) 的订阅者
       
      参数:
      eventBusMessage - 事件消息
    • fireAny

      default void fireAny(Object eventSource)
      [异步] 给当前进程的订阅者和远程进程的订阅者送事件消息,如果同类型逻辑服存在多个,只会给其中一个实例发送。
           假设现在有一个发放奖励的邮件逻辑服,我们启动了两个(或者说多个)邮件逻辑服实例来处理业务。
           当我们使用 fireAny 方法发送事件时,只会给其中一个实例发送事件。
       
      参数:
      eventSource - 事件源
    • fireAny

      void fireAny(EventBusMessage eventBusMessage)
      [异步] 给当前进程的订阅者和远程进程的订阅者送事件消息,如果同类型逻辑服存在多个,只会给其中一个实例发送。
           假设现在有一个发放奖励的邮件逻辑服,我们启动了两个(或者说多个)邮件逻辑服实例来处理业务。
           当我们使用 fireAny 方法发送事件时,只会给其中一个实例发送事件。
       
      参数:
      eventBusMessage - 事件消息
    • fireAnySync

      default void fireAnySync(Object eventSource)
      [同步] 给当前进程的订阅者和远程进程的订阅者送事件消息,如果同类型逻辑服存在多个,只会给其中一个实例发送。
           假设现在有一个发放奖励的邮件逻辑服,我们启动了两个(或者说多个)邮件逻辑服实例来处理业务。
           当我们使用 fireAny 方法发送事件时,只会给其中一个实例发送事件。
       
      参数:
      eventSource - 事件源
    • fireAnySync

      void fireAnySync(EventBusMessage eventBusMessage)
      [同步] 给当前进程的订阅者和远程进程的订阅者送事件消息,如果同类型逻辑服存在多个,只会给其中一个实例发送。
           假设现在有一个发放奖励的邮件逻辑服,我们启动了两个(或者说多个)邮件逻辑服实例来处理业务。
           当我们使用 fireAny 方法发送事件时,只会给其中一个实例发送事件。
       
      参数:
      eventBusMessage - 事件消息
    • fireLocalNeighbor

      default void fireLocalNeighbor(Object eventSource)
      [异步] 给当前进程其他逻辑服的订阅者发送事件消息,不包括当前 EventBus。
      参数:
      eventSource - 事件源
    • fireLocalNeighbor

      void fireLocalNeighbor(EventBusMessage eventBusMessage)
      [异步] 给当前进程其他逻辑服的订阅者发送事件消息,不包括当前 EventBus。
      参数:
      eventBusMessage - 事件消息
    • fireLocalNeighborSync

      default void fireLocalNeighborSync(Object eventSource)
      [同步] 给当前进程其他逻辑服的订阅者发送事件消息,不包括当前 EventBus。
      参数:
      eventSource - 事件源
    • fireLocalNeighborSync

      void fireLocalNeighborSync(EventBusMessage eventBusMessage)
      [同步] 给当前进程其他逻辑服的订阅者发送事件消息,不包括当前 EventBus。
      参数:
      eventBusMessage - 事件消息
    • setSubscribeExecutorStrategy

      void setSubscribeExecutorStrategy(SubscribeExecutorStrategy subscribeExecutorStrategy)
      set 订阅者线程执行器选择策略
      参数:
      subscribeExecutorStrategy - 订阅者线程执行器选择策略
    • getSubscribeExecutorStrategy

      SubscribeExecutorStrategy getSubscribeExecutorStrategy()
      get 订阅者线程执行器选择策略
      返回:
      订阅者线程执行器选择策略
    • setSubscriberInvokeCreator

      void setSubscriberInvokeCreator(SubscriberInvokeCreator subscriberInvokeCreator)
      set SubscriberInvokeCreator
      参数:
      subscriberInvokeCreator - SubscriberInvokeCreator
    • setEventBusMessageCreator

      void setEventBusMessageCreator(EventBusMessageCreator eventBusMessageCreator)
      set 事件消息创建者,EventBusMessage creator
      参数:
      eventBusMessageCreator - EventBusMessageCreator
    • setEventBusListener

      void setEventBusListener(EventBusListener eventBusListener)
      set 事件监听器
      参数:
      eventBusListener - 事件监听器
    • getEventBusListener

      EventBusListener getEventBusListener()
      get 事件监听器
      返回:
      事件监听器
    • setEventBrokerClientMessage

      void setEventBrokerClientMessage(EventBrokerClientMessage eventBrokerClientMessage)
      set 事件总线逻辑服相关信息
      参数:
      eventBrokerClientMessage - 事件总线逻辑服相关信息
    • setBrokerClientContext

      void setBrokerClientContext(BrokerClientContext brokerClientContext)
      当前服务器上下文(逻辑服)
      参数:
      brokerClientContext - 当前服务器上下文(逻辑服)
    • setExecutorRegion

      void setExecutorRegion(ExecutorRegion executorRegion)
      set 线程执行器管理域
      参数:
      executorRegion - 线程执行器管理域
    • getExecutorRegion

      ExecutorRegion getExecutorRegion()
      get 线程执行器管理域
      返回:
      线程执行器管理域
    • getEventBusMessageCreator

      EventBusMessageCreator getEventBusMessageCreator()
      get 事件消息创建者
      返回:
      事件消息创建者
    • getEventBrokerClientMessage

      EventBrokerClientMessage getEventBrokerClientMessage()
      get 事件总线逻辑服相关信息
      返回:
      事件总线逻辑服相关信息
    • createEventBusMessage

      default EventBusMessage createEventBusMessage(Object eventSource)
      创建事件消息
      参数:
      eventSource - 事件源
      返回:
      事件消息