枚举类 ExecutorSelector
- 所有已实现的接口:
Serializable
,Comparable<ExecutorSelector>
,Constable
订阅者线程执行器选择策略。
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
-
嵌套类概要
从类继承的嵌套类/接口 java.lang.Enum
Enum.EnumDesc<E extends Enum<E>>
-
枚举常量概要
枚举常量说明预留给开发者的[线程安全] 在线程执行器中执行[线程安全] 在线程执行器中执行[线程安全] 在用户线程执行器中执行在虚拟线程执行器中执行 -
方法概要
修饰符和类型方法说明static ExecutorSelector
返回带有指定名称的该类的枚举常量。static ExecutorSelector[]
values()
返回包含该枚举类的常量的数组, 顺序与声明这些常量的顺序相同
-
枚举常量详细资料
-
userExecutor
[线程安全] 在用户线程执行器中执行该策略将使用 action 的线程执行器,可确保同一用户(userId)在消费事件和消费 action 时, 使用的是相同的线程执行器,以避免并发问题。 注意,不要做耗时 io 相关操作,避免阻塞 action 的消费。
- 另请参阅:
-
userVirtualExecutor
在虚拟线程执行器中执行耗时相关的操作,可选择此策略
- 另请参阅:
-
methodExecutor
[线程安全] 在线程执行器中执行该策略将使用 Subscriber.id 来确定线程执行器,可确保相同的订阅者方法在消费事件时, 使用的是相同的线程执行器,以避免并发问题。 注意,不要做耗时 io 相关操作,避免阻塞其他订阅者的消费。 其他补充说明: Subscriber.id 由框架分配。该策略与 userExecutor、simpleExecutor 策略类似。 userExecutor、simpleExecutor 使用 userId 来确定线程执行器, 而 methodExecutor 则使用订阅者自身的 Subscriber.id 来确定线程执行器(你可以理解为按订阅者方法来划分)。
- 另请参阅:
-
simpleExecutor
[线程安全] 在线程执行器中执行该策略与 userExecutor 类似,但使用的是独立的线程执行器(
ExecutorRegion.getSimpleThreadExecutorRegion()
)。 使用时,需要开发者设置引用无效
EventBusMessage#setThreadIndex(long)
- 另请参阅:
-
customExecutor
预留给开发者的上述策略都不能满足业务的,开发者可以通过实现
exampleSubscribeExecutorStrategy
接口来做自定义扩展// 逻辑服添加 EventBusRunner,用于处理 EventBus 相关业务 builder.addRunner(new AbstractEventBusRunner() { @Override public void registerEventBus(EventBus eventBus, BarSkeleton skeleton) { // 你的线程执行器选择策略 eventBus.setSubscribeExecutorStrategy(new YourSubscribeExecutorStrategy()); } });
- 另请参阅:
-
-
方法详细资料
-
values
返回包含该枚举类的常量的数组, 顺序与声明这些常量的顺序相同- 返回:
- 包含该枚举类的常量的数组,顺序与声明这些常量的顺序相同
-
valueOf
返回带有指定名称的该类的枚举常量。 字符串必须与用于声明该类的枚举常量的 标识符完全匹配。(不允许有多余 的空格字符。)- 参数:
name
- 要返回的枚举常量的名称。- 返回:
- 返回带有指定名称的枚举常量
- 抛出:
IllegalArgumentException
- 如果该枚举类没有带有指定名称的常量NullPointerException
- 如果参数为空值
-