枚举类 ExecutorSelector

java.lang.Object
java.lang.Enum<ExecutorSelector>
com.iohao.game.action.skeleton.eventbus.ExecutorSelector
所有已实现的接口:
Serializable, Comparable<ExecutorSelector>, Constable

public enum ExecutorSelector extends Enum<ExecutorSelector>
订阅者线程执行器选择策略。

for example


     public class YourEventBusSubscriber implements EventBusSubscriber {
         // 指定线程执行器来执行订阅者的逻辑
         @EventSubscribe(ExecutorSelector.userExecutor)
         public void userLogin(YourEventMessage message) {
             log.info("event - 玩家[{}]登录", message.getUserId());
         }
     }

     @Data
     public class YourEventMessage implements Serializable {
         final long userId;
         public YourEventMessage(long userId) {
             this.userId = userId;
         }
     }
 
 
从以下版本开始:
21
作者:
渔民小镇
另请参阅:
日期:
2024-01-11
  • 枚举常量详细资料

    • userExecutor

      public static final ExecutorSelector userExecutor
      [线程安全] 在用户线程执行器中执行
           该策略将使用 action 的线程执行器,可确保同一用户(userId)在消费事件和消费 action 时,
           使用的是相同的线程执行器,以避免并发问题。
      
           注意,不要做耗时 io 相关操作,避免阻塞 action 的消费。
       
      另请参阅:
    • userVirtualExecutor

      public static final ExecutorSelector userVirtualExecutor
      在虚拟线程执行器中执行
           耗时相关的操作,可选择此策略
       
      另请参阅:
    • methodExecutor

      public static final ExecutorSelector methodExecutor
      [线程安全] 在线程执行器中执行
           该策略将使用 Subscriber.id 来确定线程执行器,可确保相同的订阅者方法在消费事件时,
           使用的是相同的线程执行器,以避免并发问题。
      
           注意,不要做耗时 io 相关操作,避免阻塞其他订阅者的消费。
      
           其他补充说明:
           Subscriber.id 由框架分配。该策略与 userExecutor、simpleExecutor 策略类似。
           userExecutor、simpleExecutor 使用 userId 来确定线程执行器,
           而 methodExecutor 则使用订阅者自身的 Subscriber.id 来确定线程执行器(你可以理解为按订阅者方法来划分)。
       
      另请参阅:
    • simpleExecutor

      public static final ExecutorSelector simpleExecutor
      [线程安全] 在线程执行器中执行
           该策略与 userExecutor 类似,但使用的是独立的线程执行器(ExecutorRegion.getSimpleThreadExecutorRegion())。
           使用时,需要开发者设置 
      
      引用无效
      EventBusMessage#setThreadIndex(long)
      的值( 该值需要 > 0)。
      另请参阅:
    • customExecutor

      public static final ExecutorSelector customExecutor
      预留给开发者的
           上述策略都不能满足业务的,开发者可以通过实现 SubscribeExecutorStrategy 接口来做自定义扩展
       
      example
      
               // 逻辑服添加 EventBusRunner,用于处理 EventBus 相关业务
               builder.addRunner(new AbstractEventBusRunner() {
                   @Override
                   public void registerEventBus(EventBus eventBus, BarSkeleton skeleton) {
                       // 你的线程执行器选择策略
                       eventBus.setSubscribeExecutorStrategy(new YourSubscribeExecutorStrategy());
                   }
               });
       
       
      另请参阅:
  • 方法详细资料

    • values

      public static ExecutorSelector[] values()
      返回包含该枚举类的常量的数组, 顺序与声明这些常量的顺序相同
      返回:
      包含该枚举类的常量的数组,顺序与声明这些常量的顺序相同
    • valueOf

      public static ExecutorSelector valueOf(String name)
      返回带有指定名称的该类的枚举常量。 字符串必须与用于声明该类的枚举常量的 标识符完全匹配。(不允许有多余 的空格字符。)
      参数:
      name - 要返回的枚举常量的名称。
      返回:
      返回带有指定名称的枚举常量
      抛出:
      IllegalArgumentException - 如果该枚举类没有带有指定名称的常量
      NullPointerException - 如果参数为空值