05 | 服务编排层:Pipeline 如何协调各类 Handler ?

笔记原文:05 | 服务编排层:Pipeline 如何协调各类 Handler ?


目录
1、ChannelPipeline 概述
2、ChannelPipeline 内部结构
3、ChannelHandler 接口设计
4、事件传播机制
5、异常传播机制
6、异常处理的最佳实践
7、总结

1、ChannelPipeline 概述

我们可以认为 EventLoop 是 Netty 的调度中心。

实际的业务处理逻辑则是由 ChannelPipeline 中的 ChannelHandler 完成

学完本篇尝试回答下面问题:

1、ChannelPipeline 与 ChannelHandler 的关系是什么?它们之间是如何协同工作的?

2、ChannelHandler 的类型有哪些?有什么区别?

3、Netty 中 I/O 事件是如何传播的?

2、ChannelPipeline 内部结构

原始的网络字节流经过 Pipeline ,被一步步加工,最后得到成品。

ChannelPipeline 由一组ChannelHandler 实例组成,可以把ChannelPipeline 看作是 ChannelHandler 的载体

在 ChannelPipeline 的内部,多个ChannelHandlerContext 组成双向链表

每一个 Channel 会绑定一个 ChannelPipeline
每一个 ChannelPipeline 都包含多个 ChannelHandlerContext
每一个 ChannelHandlerContext 都对应一个 ChannelHandler

⭐️

HeadContext、TailContext

DefaultChannelPipeline 有2个内部类 HeadContext、 TailContext

HeadContext 实现了 ChannelInboundHandler 和 ChannelOutboundHandler 接口。

HeadContext 是入站的第一站,出站的最后一站。

HeadContext 负责读取数据并开始传递 InBound 事件,数据处理完成后,数据会反方向经过 出站处理器,最终传递到 HeadContext。

// TODO 需要图解

TailContext 只实现了 ChannelInboundHandler 接口。

TailContext 是出站的第一站,入站的最后一站。

TailContext 用于终止 Inbound 事件传播,比如释放 Message 数据资源等
05 | 服务编排层:Pipeline 如何协调各类 Handler ?_第1张图片
05 | 服务编排层:Pipeline 如何协调各类 Handler ?_第2张图片

3、ChannelHandler 接口设计

I/O 事件的生命周期

ChannelHandler 是围绕 I/O 事件的生命周期所设计的,例如建立连接、读数据、写数据、连接销毁等

ChannelHandler 有两个重要的子接口:ChannelInboundHandler 和 ChannelOutboundHandler,分别拦截入站和出站的各种 I/O 事件。

4、事件传播机制

5、异常传播机制

6、异常处理的最佳实践

7、总结

1、ChannelPipeline 与 ChannelHandler 的关系是什么?它们之间是如何协同工作的?

ChannelPipeline 是双向链表结构,包含 ChannelInboundHandler 和 ChannelOutboundHandler 两种ChannelHandler 。
05 | 服务编排层:Pipeline 如何协调各类 Handler ?_第3张图片

2、ChannelHandler 的类型有哪些?有什么区别?

ChannelInboundHandler 、ChannelOutboundHandler两中类型

ChannelInboundHandler 用来处理入站事件

ChannelOutboundHandler 用来处理出站事件

3、Netty 中 I/O 事件是如何传播的?

入站事件和 出站事件的传播方向相反,入站事件的传播方向为 Head -> Tail,而 出站事件传播方向是 Tail -> Head。

你可能感兴趣的:(netty)