笔记原文: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 ?相关推荐

  1. 来自京东、唯品会对微服务编排、API网关、持续集成的实践分享(上)

    架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第三期:微服务.微服务架构以其高度的弹性.灵活性和效率的巨大提升,快速受到各领域架构师和技术决策者的关注.它的基本理念是将一个肥大的 ...

  2. 【BPM技术】Zeebe是一个用于微服务编排的工作流引擎。

    Zeebe是一个用于微服务编排的工作流引擎. 这篇文章将帮助你确切地了解什么是Zeebe以及它如何可能与你相关.我们将简要介绍Zeebe以及它所解决的问题,然后再进行更详细的介绍. 我们将在整个写作过 ...

  3. esb 服务编排_在ESB中进行路由和编排之间的选择

    esb 服务编排 介绍 如今,企业服务总线确实是有用的解决方案,它结合了一系列工具,可以解决应用程序和服务集成领域中的实际问题. 但是,它们给工具箱带来了轻微的不便,给工具箱用户带来了不便,后者知道解 ...

  4. java 服务编排_适用于Java开发人员的微服务:部署和编排

    java 服务编排 在这篇文章中,我们拥有一个全面的文章微服务针对Java开发:部署和协调. 1.简介 如今,越来越多的组织依靠云计算和托管服务产品来托管其服务. 这种策略有很多好处,但是您仍然必须为 ...

  5. 【须弥SUMERU】宜信分布式安全服务编排实践

    概要 1.分布式安全服务编排概念 2.须弥(Sumeru)关键实现思路 3.应用场景 前言 在笔者理解,安全防御的本质之一是增加攻击者的攻击成本,尤其是时间成本,那么从防御的角度来说,如何尽早和及时地 ...

  6. 万字长文:读懂微服务编排利器Zeebe

    万字长文:读懂微服务编排利器Zeebe 1.工作流与微服务编排 1.1工作流 提到工作流,印象里都是OA系统各种请假审批流.事实上,广义上的工作流是对工作流程及其各操作步骤之间业务规则的抽象.概括.描 ...

  7. ajax请求是宏任务还是微任务_微服务编排引擎Cadence简介

    原文来源:https://cadenceworkflow.io/ 1.概述(Overview)2.使用案例(Use cases)2.1.定时轮询(aka Distributed Cron)2.2.微服 ...

  8. Docker 安装 命令 数据卷 应用部署 网络优化 Dockerfile 服务编排Compose 私有仓库

    Docker 1. 初识docker 1.1 Docker是什么 了解Docker的前生LXC LXC与docker的关系 Docker 的特点 1.2 为什么使用Docker Docker的优势 缺 ...

  9. docker swarm 集群服务编排部署指南(docker stack)

    Docker Swarm 集群管理 概述 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机,使得容器可以组成跨主机的子网网络.D ...

最新文章

  1. pthread_mutex_lock用法
  2. 探讨Express Router Route
  3. CentOS 7.0 yum安装Apache、PHP和MySQL
  4. mysql 类似 oracle connect by,mysql中实现相仿oracle的SYS_CONNECT_BY_PATH功能
  5. python界面-(八)Python 图形化界面设计
  6. Linux /boot分区空间不足
  7. linux下运行python unitest_Python单元测试unittest代码详解
  8. 对HTML5标签的认识(三)
  9. android四大基本布局,四大布局 使用详解
  10. Python画樱花树~
  11. I2S—音频播放与录音输入
  12. 知识图谱嵌入的衡量指标:MRR,MR,HITS@n
  13. 靠一碗面一年三轮融资受资本热捧,张拉拉真的高枕无忧?
  14. 新闻主题分类任务——torchtext 库进行文本分类
  15. Django框架实现在线考试系统
  16. matlab差分迭代解决静电场边界问题(含第二类边界条件)
  17. ASEMI整流桥KBPC3510W参数特性,KBPC3510W封装尺寸
  18. 2021年机修钳工(高级)考试题及机修钳工(高级)免费试题
  19. 美团外卖商家版多开工具
  20. 以下选项不是python文件操作的是_以下选项不是Python文件读操作的是(____)。...

热门文章

  1. Teamcenter - Index search 找不到相关物件的解决方法
  2. stm32代码_ME3616 NB-IoT模组对接OneNET教程以及STM32代码
  3. android获取服务器时间格式,Android 获取服务器与客户端时差的实例代码
  4. 一般判五年几年能出来_A股十年不涨的“元凶”被揪了出来,指数不该被冤枉...
  5. django url 生效_django 定制管理页面外观 模板文件不生效的解决方法
  6. java string传递_Java,将String从一种方法传递到另一种方法
  7. linux 在文件中增加空行,linux – 在不同组的行之间添加空行
  8. python玩微信跳一跳_用python玩微信跳一跳
  9. php 获取数据库函数吗,如何正确理解PHP获取显示数据库数据函数
  10. matlab蚁群算法代码,蚁群算法的matlab实现