容灾方案:Retry 和 Fallback 该怎么抉择?(下)

简介: 容灾方案:Retry 和 Fallback 该怎么抉择?(下)

3. 设计&扩展

3.1 核心设计

整体流程如下:

  1. ActionAspect 从 @Action 中读取配置信息,将请求类型绑定到线程上下文
  2. 然后执行正常业务逻辑
  3. 当调用 @SmartFault 注解的方法时,会被 SmartFaultMethodInterceptor 拦截器拦截

  1. 拦截器通过 ActionTypeProvider 获取当前的 ActionType
  1. 根据 ActionType 对请求进行路由
  2. 如果是 COMMAND 操作,将使用 RetryTemplate 执行请求,在发生异常时,通过重试配置进行请求重发,从而最大限度的获得远程结果
  3. 如果是 QUERY 操作,将使用 FallbackTemplate(重试次数为0的 RetryTemplate)执行请求,当发生异常时,调用 fallback 方法,执行配置的 recover 方法,直接使用返回结果
  4. 获取远程结果后,执行后续的业务逻辑
  5. 最后,ActionAspect 将 ActionType 从线程上下文中移除

4. 项目信息

项目仓库地址:https://gitee.com/litao851025/lego

项目文档地址:https://gitee.com/litao851025/lego/wikis/support/smart-fault



相关文章
|
Linux iOS开发 UED
探索Qt折线图之美:一次详尽的多角度解析
探索Qt折线图之美:一次详尽的多角度解析
2913 0
|
缓存 JSON 前端开发
什么是请求头?常见的请求头有哪些?
请求头(Request Headers)是在HTTP协议中用于传递关于请求的额外信息的部分。它包含了客户端(通常是浏览器或应用程序)与服务器之间进行通信所需的元数据
8551 1
|
存储 JSON JavaScript
Node.js 日志之winston使用指南
前面在《Node.js 日志最佳实践指南》介绍了关于日志的最佳实现指南,本文将使用 Winston 库来构建一个简单的日志功能。
2435 0
Node.js 日志之winston使用指南
|
存储 关系型数据库 MySQL
项目开发中的时区问题汇总
项目开发中的时区问题汇总
579 0
element-plus:el-table展开图标替换
element-plus:el-table展开图标替换
1306 0
|
Java 开发工具 Maven
Git 不能提交空目录?我也是醉了!
Java技术栈 www.javastack.cn 关注阅读更多优质文章 Git 不能提交空目录?我也是醉了!
766 0
Git 不能提交空目录?我也是醉了!
|
消息中间件 运维 算法
SPL工业智能:原料与产品的拟合
工业生产活动的目标是利用原料生产产品,从而产生利润。原料经过一系列加工过程,包括物理反应和化学反应,最终形成产品,生产的理想状态是原料到产品的转换率是确定的,工厂想生产多少产品就知道需要准备多少原料,提高生产效率。 许多工艺原理和生产经验都表明,在简化情况下,可以认为原料用量和产品产量之间近似是线性关系。这样,每一种原料和每一种产品之间都会有一个与原料用量无关的恒定转换率,在化工界称为收率
2288 0
SPL工业智能:原料与产品的拟合
|
MySQL 关系型数据库 Linux
Linux启动/停止/重启Mysql数据库的方法
1、查看mysql版本方法一:status;方法二:select version(); 2、Mysql启动、停止、重启常用命令a、启动方式1、使用 service 启动:[root@localhost /]# service mysqld start (5.
9700 0
|
Java 应用服务中间件 Android开发
Intellij IDEA官方帮助文档解释什么是Artifact(原文翻译)
说明 官方文档地址: https://www.jetbrains.com/help/idea/2016.2/working-with-artifacts.
4142 0