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

Seata源码笔记(三)

Seata源码笔记(三)

  • RPC部分
    • 基础接口
      • AbstractNettyRemoting
        • init方法
        • send方法(仅看sendSync)
          • sendSync中的钩子
      • AbstractNettyRemotingClient

基于incubator-seata-2.x

RPC部分

基础接口

AbstractNettyRemoting

init方法

主要设置请求超时监控,通过 scheduleAtFixedRate 设定定时任务,遍历 futures(futures由send方法放入请求消息信息),将超时请求删除并通知。在 future.remove 后。通过 future.setResultMessage 设置异常信息,来保护多线程下future 的消息同步。
在这里插入图片描述

send方法(仅看sendSync)

futures 中记录请求消息,通过 isWritable 判断是否可以写入(因为 writeAndFlush 不是原子操作,是先将消息写入 ChannelOutboundBuffer,再刷新到 socket 的发送缓冲区,所以用 isWritable 方法来判断一下当前 ChannelOutboundBuffer 里的写缓存水位,防止 OOM 发生)。
PS:FrameworkErrorCode被@Deprecated了,但是好像早期代码用的太多了,后来似乎用的ErrorCode,并通过ResourceBundleUtil找的error/ErrorCode获取的异常信息。
在这里插入图片描述在这里插入图片描述

sendSync中的钩子

钩子默认用的 StatusRpcHook ,对连接的调用次数进行统计,并通过LeastActiveLoadBalance实现负载均衡里的活跃度自动感知分配算法。

在这里插入图片描述在这里插入图片描述在这里插入图片描述destroyChannel由子类Client和Server负责实现。

AbstractNettyRemotingClient

继承AbstractNettyRemoting,实现RemotingClient,待续。。


http://www.kler.cn/a/391739.html

相关文章:

  • 【Pikachu】目录遍历实战
  • Elasticsearch可视化工具Elasticvue插件用法
  • 若依笔记(八):Docker容器化并部署到公网
  • 如何在Puppeteer中实现表单自动填写与提交:问卷调查
  • GitLab基于Drone搭建持续集成(CI/CD)
  • 黄色校正电容102j100
  • Spring Boot编程训练系统:架构设计与实现技巧
  • Vue自定义指令详解——以若依框架中封装指令为例分析
  • 从建立TRUST到实现FAIR:可持续海洋经济的数据管理
  • G-Star光引计划启动|投稿GitCode项目故事赢AirPods Pro,通过必得京东卡!
  • C++学习笔记----11、模块、头文件及各种主题(一)---- 模板概览与类模板(6)
  • 显示微服务间feign调用的日志
  • 系统架构(01架构的特点,本质...)
  • 技术栈2:Git分布式版本控制工具
  • pycharm快速更换虚拟环境
  • 文档数字化采集与智能处理:图像弯曲矫正技术概述
  • golang 泛型 middleware 设计模式: 一次只做一件事
  • (已解决)Java不是内部或者外部命令,也不是可运行的程序
  • 工位管理新纪元:Spring Boot企业系统
  • Chrome使用IE内核
  • SCUI Admin + Laravel 整合
  • 网络安全-蓝队基础
  • 科学计算服务器:如何计算算力?如何提升科学研究效率?
  • 音视频入门基础:MPEG2-TS专题(4)——使用工具分析MPEG2-TS传输流
  • Python、selenium 自动化 - 实现自动上传外部文件
  • Flutter 小技巧之 OverlayPortal 实现自限性和可共享的页面图层