`TransportService` 是 **Elasticsearch 传输层的“中枢路由器”**

发布于:2025-07-21 ⋅ 阅读:(12) ⋅ 点赞:(0)

`TransportService` 是 **Elasticsearch 传输层的“中枢路由器”**,负责把节点间的 **所有请求(搜索、集群状态、索引、恢复、快照、许可证……)** 通过 **TCP 连接** 发出去、收回来,并管理 **连接生命周期、超时、重试、压缩、流控和反压**。  
一句话:  
> **“TransportService 就是 Elasticsearch 的『RPC 总线』,所有跨节点调用都要经过它。”**

---

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

| 功能 | 说明 |
|---|---|
| **节点间 RPC** | 发送任意 `TransportRequest`,接收 `TransportResponse`,支持同步/异步/批量。 |
| **连接管理** | 维护与其他节点的长连接池(TCP keep-alive、重连、断线剔除)。 |
| **处理器注册** | 通过 `registerRequestHandler` 把各种业务逻辑(搜索、集群、索引、快照…)挂到 `action` 字符串上。 |
| **流控/反压** | 基于 Netty 的 `ByteBuf` 管理,防止 OOM。 |
| **压缩** | 支持压缩阈值配置,默认开启。 |
| **安全** | 集成 TLS/SSL、节点认证、许可控制。 |

---

### ✅ 2. 典型调用链(任意业务 → TransportService)

```text
业务代码(如 SearchTransportService)
    ↓ 构造 TransportRequest
TransportService.sendRequest(connection, ACTION_NAME, request, listener)
    ↓ Netty
对端节点 TransportService
    ↓ 查找 handler
TransportRequestHandler.handle(request, channel, task)
    ↓ 业务逻辑
channel.sendResponse(response)
```

---

### ✅ 3. 与 SearchTransportService 的关系

- **SearchTransportService** 只是对 `TransportService` 的 **薄封装**,把搜索相关的 `ACTION_NAME` 和序列化逻辑注册到 `TransportService`。
- 其他模块(如 `TransportClusterStateAction`、`TransportShardBulkAction`、`TransportSnapshotRestoreAction`…)同样通过 `TransportService` 完成跨节点通信。

---

### ✅ 4. 关键 API(8.x)

| 方法 | 用途 |
|---|---|
| `sendRequest(node, action, request, listener)` | 发请求 |
| `registerRequestHandler(action, requestReader, executor, handler)` | 注册处理逻辑 |
| `connectToNode(node)` / `disconnectFromNode(node)` | 连接管理 |
| `getConnection(node)` | 获取连接池对象 |

---

### ✅ 一句话总结

> `TransportService` 是 **Elasticsearch 所有节点间通信的“高速公路”**,搜索、集群、索引、恢复、快照等模块都只是在这条路上跑的不同“车次”。


网站公告

今日签到

点亮在社区的每一天
去签到