3. 设计&扩展
3.1 核心设计
整体流程如下:
- ActionAspect 从 @Action 中读取配置信息,将请求类型绑定到线程上下文
- 然后执行正常业务逻辑
- 当调用 @SmartFault 注解的方法时,会被 SmartFaultMethodInterceptor 拦截器拦截
- 拦截器通过 ActionTypeProvider 获取当前的 ActionType
- 根据 ActionType 对请求进行路由
- 如果是 COMMAND 操作,将使用 RetryTemplate 执行请求,在发生异常时,通过重试配置进行请求重发,从而最大限度的获得远程结果
- 如果是 QUERY 操作,将使用 FallbackTemplate(重试次数为0的 RetryTemplate)执行请求,当发生异常时,调用 fallback 方法,执行配置的 recover 方法,直接使用返回结果
- 获取远程结果后,执行后续的业务逻辑
- 最后,ActionAspect 将 ActionType 从线程上下文中移除
4. 项目信息
项目仓库地址:https://gitee.com/litao851025/lego
项目文档地址:https://gitee.com/litao851025/lego/wikis/support/smart-fault
