Elasticsearch NettyTransport通信机制

2022-01-18 00:00:00 创建 请求 方法 启动 希望

ES 当发起各种Action类的Request时, 在集群环境中通常需要进行请求的转发, 此时就会出现RPC通信, 针对此RPC通信ES 是通过NettyTransport类来完成转发与接收功能的. 实际上就是基于Netty的一个通信代码模块. 在Node启动以及TransportClient初始化的过程中都会创建NettyTransport

Node节点启动时

当节点Node启动时会根据依赖注入获取TransportService实例, 并调用其start方法,终会转向NettyTransport的doStart 方法, 进而创建Netty RPC的客户端以及服务端对象, 通过MessageHandler来处理请求或者处理Response.

public Node start() {               //... 省略        injector.getInstance(MappingUpdatedAction.class).setClient(client);        injector.getInstance(IndicesService.class).start();        injector.getInstance(IndexingMemoryController.class).start();        injector.getInstance(IndicesClusterStateService.class).start();        injector.getInstance(IndicesTTLService.class).start();        injector.getInstance(SnapshotsService.class).start();        injector.getInstance(SnapshotShardsService.class).start();        injector.getInstance(RoutingService.class).start();        injector.getInstance(SearchService.class).start();        injector.getInstance(MonitorService.class).start();        injector.getInstance(RestController.class).start();        // TODO hack around circular dependencies problems        injector.getInstance(GatewayAllocator.class).setReallocation(injector.getInstance(ClusterService.class), injector.getInstance(RoutingService.class));        injector.getInstance(ResourceWatcherService.class).start();        injector.getInstance(GatewayService.class).start();        // Start the transport service now so the publish address will be added to the local disco node in ClusterService        TransportService transportService = injector.getInstance(TransportService.class);        transportService.start();        injector.getInstance(ClusterService.class).start();       //... 省略        return this;    }

相关文章