`SearchTransportService` 是 **协调节点与数据节点之间“搜索子请求”通信的运输层**

`SearchTransportService` 是 **协调节点与数据节点之间“搜索子请求”通信的运输层**,它把**协调节点**发出的 **查询阶段、取回阶段、DFS 阶段、滚动上下文等** 请求 **序列化并通过 TCP 发送给各个数据节点**,再把数据节点的返回结果 **反序列化后交还给协调节点**。

一句话:  
> **“协调节点不直接调用 SearchService,而是通过 SearchTransportService 把请求发出去,让数据节点上的 SearchService 干活。”**

---

### ✅ 核心职责(8.x)

| 职责 | 说明 |
|---|---|
| **发送子请求** | `sendExecuteQuery`、`sendExecuteFetch`、`sendExecuteDfs`、`sendFreeContext` … |
| **注册处理器** | 在启动时把 `SearchService` 的各阶段方法注册为 `TransportRequestHandler`,让数据节点能够接收并执行。 |
| **结果回调** | 所有方法都是 **异步** 的,返回 `ActionListener<SearchPhaseResult>` 给协调节点。 |
| **连接管理** | 内部封装 `TransportService`,自动处理节点下线、重试、超时。 |

---

### ✅ 典型调用链(协调节点 → 数据节点)

```
协调节点 SearchPhase
    ↓ 调用 SearchTransportService.sendExecuteQuery(...)
    ↓ TCP
数据节点 SearchTransportService → 对应 RequestHandler
    ↓ 调用 SearchService.executeQueryPhase(...)
    ↓ 返回结果
    ↓ TCP
协调节点 listener.onResponse(...)
```

---

### ✅ 关键源码片段(8.x)

```java
// 协调节点:TransportSearchAction → InitialSearchPhase
searchTransportService.sendExecuteQuery(
        connection,
        queryShardRequest,
        new ActionListener<QuerySearchResult>() { ... });

// 数据节点:启动时注册
transportService.registerRequestHandler(
        QUERY_ACTION_NAME,
        QuerySearchRequest::new,
        ThreadPool.Names.SEARCH,
        (request, channel, task) -> {
            QuerySearchResult result = searchService.executeQueryPhase(request, (SearchShardTask) task);
            channel.sendResponse(result);
        });
```

---

### ✅ 一句话总结

> `SearchTransportService` 是 **协调节点与数据节点之间的“搜索 RPC 层”**,所有跨节点的查询/取回/DFS/滚动请求都经它转发,真正的查询逻辑仍落在数据节点的 `SearchService`。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值