当前位置: 首页 > news >正文

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

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

http://www.dtcms.com/a/288676.html

相关文章:

  • java-chains 是 Vulhub 团队开发的一款专注于 Java 反序列化漏洞利用链(Gadget Chains) 的安全测试工具
  • 算法训练营day25 回溯算法④ 补充联系题目 332.重新安排行程、51. N皇后、37. 解数独
  • 【Settlement】P1:整理GH中的矩形GRID角点到EXCEL中
  • 算法题(176):three states
  • Python 图片爬取入门:从手动下载到自动批量获取
  • 【JS逆向基础】数据库之MongoDB
  • Django接口自动化平台实现(四)
  • 基于单片机的智能家居安防系统设计
  • API接口签名和敏感信息加密使用国密SM方案
  • Web开发 04
  • 【新手向】PyTorch常用Tensor shape变换方法
  • 零基础学习性能测试第二章-linux/jvm/mysql等数据收集环境搭建
  • Golang基础语法-数据类型
  • Go语言--语法基础6--基本数据类型--map类型
  • Java学习第六十部分——JVM
  • An End-to-End Attention-Based Approach for Learning on Graphs NC 2025
  • 04 51单片机之数码管显示
  • Shell脚本-uniq工具
  • 两个路由器通过不同的网段互联
  • 从TPACK到TPACK - AI:人工智能时代教师知识框架的重构与验证
  • EPLAN 电气制图(十): 继电器控制回路绘制(下)放料、放灰
  • 基于单片机的IC卡门禁系统设计
  • 最大子数组和问题-详解Kadane算法
  • 每日一题7.20
  • OSS文件上传(一):简单上传
  • feignClient 调用详细流程
  • Valgrind Memcheck 全解析教程:6个程序说明基础内存错误
  • 判断一个数是否为质数方法
  • VSCode使用Jupyter完整指南配置机器学习环境
  • c#:TCP服务端管理类