final class NettyRequestMessageClientProcessorHook implements RequestMessageClientProcessorHook {
... ... 省略部分代码
public NettyRequestMessageClientProcessorHook() {
... ... 省略部分代码
for (int i = 0; i < availableProcessors; i++) {
// io.netty.util.concurrent.DefaultThreadFactory
var threadFactory = new DefaultThreadFactory("RequestMessage-" + i);
executors[i] = ExecutorKit.newSingleThreadExecutor(threadFactory);
}
}
}
框架提供 RequestMessageClientProcessorHook 新的默认实现 DefaultRequestMessageClientProcessorHook 功能
目前的 RequestMessageClientProcessorHook 默认实现较为简单,如下
在 bolt 用户线程中直接调用业务框架来消费请求,在某些业务场景中,这种默认配置更适合,因为 bolt 处理业务时是多线程的,使用的是 bolt 的用户线程;(注意:这个用户线程并不是指的玩家线程,这个会在之后的相关文档中说明)。
由于 bolt 处理业务时是多线程的,当同一个玩家的多个请求同时修改一个共享数据时,会有并发问题。所以通常需要开发者自定义线程关联来处理这个问题,让开发者自定义线程的关联,具有更高的灵活性与扩展性,这个在稍后举例说明;
如何定制 RequestMessageClientProcessorHook
新默认实现 DefaultRequestMessageClientProcessorHook
使用 Netty 的 DefaultThreadFactory
使用 TTL
小结
除了列出的参考实现外,还有很多其他的实现,开发者按需参考与选择;
参考文档:业务线程编排-钩子接口