简介
源码说明
TransportService 负责总的业务处理
Transport 是一个接口,定义了一个transport需要做哪些操作
TcpTransport 是实现了Transport接口的抽象类,定义了transport的一些基本操作
具体的实现有两种Netty和nio实现的,默认是netty的,nio则是插件形式提供。
public class Netty4Transport extends TcpTransport
ES的官方扩展x-park对原有的协议进行了加密封装
SecurityNetty4ServerTransport
SecurityNetty4Transport
Transport配置类,基础类
/**
* 注册一个请求操作
*/
<Request extends TransportRequest> void registerRequestHandler(RequestHandlerRegistry<Request> reg);
/**
* 根据action名称返回已注册的handler
*/
RequestHandlerRegistry<? extends TransportRequest> getRequestHandler(String action);
/**
* 添加消息监听器
*/
void addMessageListener(TransportMessageListener listener);
/**
* 移除消息监听器
*/
boolean removeMessageListener(TransportMessageListener listener);
/**
* transport绑定地址
*/
BoundTransportAddress boundAddress();
/**
* profile的绑定地址
*/
Map<String, BoundTransportAddress> profileBoundAddresses();
/**
* 字符串形式的返回一个transport地址
*/
TransportAddress[] addressesFromString(String address, int perAddressLimit) throws UnknownHostException;
/**
* 根据给定的节点打开一个新的连接,连接可用时会调用listener,返回的是一个可用的Releasable连接
*/
Releasable openConnection(DiscoveryNode node, ConnectionProfile profile, ActionListener<Transport.Connection> listener);
客户端TransportService
这个服务是用来进行Transport的一些事务处理的。
封装的内容
- transport transport的基本配置
- connectionManager transport连接的管理器,维护所有的连接。
- threadPool 线程池,服务基本上都会用到连接池,所以这里维护一份
- clusterName 集群名称
- taskManager 任务管理器,ES中所有的操作都会作为一个task注册到这里
- TransportInterceptor.AsyncSender asyncSender 异步发送tranport请求的客户端
- Function<BoundTransportAddress, DiscoveryNode> localNodeFactory 维护所有的可用来连接的DiscoveryNode
- Transport.ResponseHandlers responseHandlers 注册了所有的响应操作
- TransportInterceptor 发送和接受信息的拦截器。
- timeoutInfoHandlers 超时操作
- tracerLog 追踪日志及相应上一篇说到的配置的信息维护
- remoteClusterService 远程集群服务 这个是新功能
- localNode localNodeConnection 本地连接的配置。。
服务端 Netty4Transport(继承自TcpTransport(Transport的实现))
包括四种连接类型low/med/high/ping
- low面向批处理的请求,比如恢复或者批量索引等操作
- med用于搜索或者单文档索引
- high用于集群状态通信等
- ping用于与集群中其他节点进行ping请求。