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 数据资源等
3、ChannelHandler 接口设计
I/O 事件的生命周期
ChannelHandler 是围绕 I/O 事件的生命周期所设计的,例如建立连接、读数据、写数据、连接销毁等
ChannelHandler 有两个重要的子接口:ChannelInboundHandler 和 ChannelOutboundHandler,分别拦截入站和出站的各种 I/O 事件。
4、事件传播机制
5、异常传播机制
6、异常处理的最佳实践
7、总结
1、ChannelPipeline 与 ChannelHandler 的关系是什么?它们之间是如何协同工作的?
ChannelPipeline 是双向链表结构,包含 ChannelInboundHandler 和 ChannelOutboundHandler 两种ChannelHandler 。
2、ChannelHandler 的类型有哪些?有什么区别?
ChannelInboundHandler 、ChannelOutboundHandler两中类型
ChannelInboundHandler 用来处理入站事件
ChannelOutboundHandler 用来处理出站事件
3、Netty 中 I/O 事件是如何传播的?
入站事件和 出站事件的传播方向相反,入站事件的传播方向为 Head -> Tail,而 出站事件传播方向是 Tail -> Head。
05 | 服务编排层:Pipeline 如何协调各类 Handler ?相关推荐
- 来自京东、唯品会对微服务编排、API网关、持续集成的实践分享(上)
架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第三期:微服务.微服务架构以其高度的弹性.灵活性和效率的巨大提升,快速受到各领域架构师和技术决策者的关注.它的基本理念是将一个肥大的 ...
- 【BPM技术】Zeebe是一个用于微服务编排的工作流引擎。
Zeebe是一个用于微服务编排的工作流引擎. 这篇文章将帮助你确切地了解什么是Zeebe以及它如何可能与你相关.我们将简要介绍Zeebe以及它所解决的问题,然后再进行更详细的介绍. 我们将在整个写作过 ...
- esb 服务编排_在ESB中进行路由和编排之间的选择
esb 服务编排 介绍 如今,企业服务总线确实是有用的解决方案,它结合了一系列工具,可以解决应用程序和服务集成领域中的实际问题. 但是,它们给工具箱带来了轻微的不便,给工具箱用户带来了不便,后者知道解 ...
- java 服务编排_适用于Java开发人员的微服务:部署和编排
java 服务编排 在这篇文章中,我们拥有一个全面的文章微服务针对Java开发:部署和协调. 1.简介 如今,越来越多的组织依靠云计算和托管服务产品来托管其服务. 这种策略有很多好处,但是您仍然必须为 ...
- 【须弥SUMERU】宜信分布式安全服务编排实践
概要 1.分布式安全服务编排概念 2.须弥(Sumeru)关键实现思路 3.应用场景 前言 在笔者理解,安全防御的本质之一是增加攻击者的攻击成本,尤其是时间成本,那么从防御的角度来说,如何尽早和及时地 ...
- 万字长文:读懂微服务编排利器Zeebe
万字长文:读懂微服务编排利器Zeebe 1.工作流与微服务编排 1.1工作流 提到工作流,印象里都是OA系统各种请假审批流.事实上,广义上的工作流是对工作流程及其各操作步骤之间业务规则的抽象.概括.描 ...
- ajax请求是宏任务还是微任务_微服务编排引擎Cadence简介
原文来源:https://cadenceworkflow.io/ 1.概述(Overview)2.使用案例(Use cases)2.1.定时轮询(aka Distributed Cron)2.2.微服 ...
- Docker 安装 命令 数据卷 应用部署 网络优化 Dockerfile 服务编排Compose 私有仓库
Docker 1. 初识docker 1.1 Docker是什么 了解Docker的前生LXC LXC与docker的关系 Docker 的特点 1.2 为什么使用Docker Docker的优势 缺 ...
- docker swarm 集群服务编排部署指南(docker stack)
Docker Swarm 集群管理 概述 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机,使得容器可以组成跨主机的子网网络.D ...
最新文章
- pthread_mutex_lock用法
- 探讨Express Router Route
- CentOS 7.0 yum安装Apache、PHP和MySQL
- mysql 类似 oracle connect by,mysql中实现相仿oracle的SYS_CONNECT_BY_PATH功能
- python界面-(八)Python 图形化界面设计
- Linux /boot分区空间不足
- linux下运行python unitest_Python单元测试unittest代码详解
- 对HTML5标签的认识(三)
- android四大基本布局,四大布局 使用详解
- Python画樱花树~
- I2S—音频播放与录音输入
- 知识图谱嵌入的衡量指标:MRR,MR,HITS@n
- 靠一碗面一年三轮融资受资本热捧,张拉拉真的高枕无忧?
- 新闻主题分类任务——torchtext 库进行文本分类
- Django框架实现在线考试系统
- matlab差分迭代解决静电场边界问题(含第二类边界条件)
- ASEMI整流桥KBPC3510W参数特性,KBPC3510W封装尺寸
- 2021年机修钳工(高级)考试题及机修钳工(高级)免费试题
- 美团外卖商家版多开工具
- 以下选项不是python文件操作的是_以下选项不是Python文件读操作的是(____)。...
热门文章
- Teamcenter - Index search 找不到相关物件的解决方法
- stm32代码_ME3616 NB-IoT模组对接OneNET教程以及STM32代码
- android获取服务器时间格式,Android 获取服务器与客户端时差的实例代码
- 一般判五年几年能出来_A股十年不涨的“元凶”被揪了出来,指数不该被冤枉...
- django url 生效_django 定制管理页面外观 模板文件不生效的解决方法
- java string传递_Java,将String从一种方法传递到另一种方法
- linux 在文件中增加空行,linux – 在不同组的行之间添加空行
- python玩微信跳一跳_用python玩微信跳一跳
- php 获取数据库函数吗,如何正确理解PHP获取显示数据库数据函数
- matlab蚁群算法代码,蚁群算法的matlab实现