【Elasticsearch】如何拿下ES中的回调式代码ActionListener.

把 ES 的“回调式”代码吃透,最忌东看一个 listener 西看一个 wrap。按下面 **4 步闭环路线** 走,**一周就能脱盲,两周可写 PR 级代码**。

--------------------------------------------------
① 先背下“一张图 + 三句口诀”
- 图(记住即可):
  ```
  void foo(..., ActionListener<R> l)
  ├─ 成功 → l.onResponse(R)
  └─ 失败 → l.onFailure(Exception)
  ```
- 口诀:
  1. **无返回值**,最后一个参数永远是 `ActionListener<XXX>`;
  2. **结果不 return,全靠回调**;
  3. 链式用 `delegateFailure` / `map` / `run`,**绝不自己 new**。

--------------------------------------------------
② 5 个最小可运行样板
把下面 5 个例子 **单步跟一遍**(本地 IDEA 断点),就覆盖了 90 % 高频模式:

| 样板 | 入口类 | 关键回调 |
|---|---|---|
| 1. 建索引 | `TransportCreateIndexAction` | `CreateIndexService#createIndex` 里的 `ActionListener<ClusterStateUpdateResponse>` |
| 2. 写文档 | `TransportBulkAction` | `BulkOperation#run` → `ActionListener<BulkResponse>` |
| 3. 搜索 | `TransportSearchAction` | `SearchService#executeQueryPhase` → `ActionListener<SearchResponse>` |
| 4. 集群状态 | `TransportClusterHealthAction` | `ClusterService#submitStateUpdateTask` → `ActionListener<ClusterState>` |
| 5. 分片恢复 | `PeerRecoveryTargetService` | `startRecovery` → `ActionListener<RecoveryResponse>` |

**操作提示**  
- 把日志调到 DEBUG,断点打在 `ActionListener.wrap` 那一行,**一路 F8 跟回调**,看结果怎么一步步传回 Netty。

--------------------------------------------------
③ 手写 3 个“玩具链”
用 ES

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值