gtsoft-snail-job-server/doc/X-RETRY文档.md
2023-01-14 21:02:26 +08:00

4.9 KiB
Raw Blame History

《分布式异常重试服务平台 X-RETRY》

简介

X-RETRY 基于服务治理的思想我们开发了重试治理的功能,支持动态配置,接入方式基本无需入侵业务代码,并使用多种策略结合的方式在链路层面控制重试放大效应,兼顾易用性、灵活性、安全性的分布式异常重试服务平台

社区

https://www.byteblogs.com/chat

特性

  1. 管控重试流量,预防重试风暴,及早发现和预警,并且提供流程管理手段
  2. 保证易用性: 业务接入成本小。避免依赖研发人员的技术水平,保障重试的稳定性
  3. 灵活性: 能够动态调整配置,启动/停止任务,以及终止运行中的重试数据
  4. 操作简单:一分钟上手支持WEB页面对重试数据CRUD操作。
  5. 数据大盘: 实时管控系统重试数据。
  6. 多样化退避策略: Cron、固定间隔、等级触发、随机时间触发
  7. 容器化部署: 服务端支持docker容器部署
  8. 高性能调度平台: 支持服务端节点动态扩容和缩容
  9. 多样化重试类型: 支持ONLY_LOCAL、ONLY_REMOTE、LOCAL_REMOTE多种重试类型
  10. 重试数据管理: 可以做到重试数据不丢失、重试数据一键回放
  11. 支持多样化的告警方式: 邮箱、企业微信、钉钉

快速入门

添加依赖

<dependency>
    <groupId>com.x.retry</groupId>
    <artifactId>x-retry-client-starter</artifactId>
    <version>0.0.0.1-SNAPSHOT</version>
</dependency>

配置

添加注解开启X-RETRY功能

@SpringBootApplication
@EnableXRetry(group = "example_group")
public class ExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(ExampleApplication.class, args);
    }

}

为需要重试的方法添加重试注解

@Retryable(scene = "errorMethodForLocalAndRemote", localTimes = 3, retryStrategy = RetryType.LOCAL_REMOTE)
    public String errorMethodForLocalAndRemote(String name) {

        double i = 1 / 0;

        return "这是一个简单的异常方法";
    }

Retryable 详解

属性 类型 必须指定 默认值 描述
scene String 场景
include Throwable 包含的异常
exclude Throwable 排除的异常
retryStrategy RetryType LOCAL_REMOTE 重试策略
retryMethod RetryMethod RetryAnnotationMethod 重试处理入口
bizId BizIdGenerate SimpleBizIdGenerate 自定义业务id默认为hash(param),传入成员列表全部拼接取hash
bizNo String bizNo spel表达式
localTimes int 3 本地重试次数 次数必须大于等于1
localInterval int 2 本地重试间隔时间(s)

配置部署服务端调度平台

初始化数据库

数据库脚本位置

doc/sql/x_retry.sql

系统配置

spring:
  datasource:
    name: x_retry
    url:  jdbc:mysql://localhost:3306/x_retry?useSSL=false&characterEncoding=utf8&useUnicode=true
    username: root
    password: root
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.jdbc.Driver
    hikari:
      connection-timeout: 30000
      minimum-idle: 5
      maximum-pool-size: 20
      auto-commit: true
      idle-timeout: 30000
      pool-name: x_retry
      max-lifetime: 1800000
      connection-test-query: SELECT 1
  resources:
    static-locations: classpath:admin/
mybatis-plus:
  mapper-locations: classpath:/mapper/*.xml
  typeAliasesPackage: com.x.retry.server.persistence.mybatis.po
  global-config:
    db-config:
      field-strategy: NOT_EMPTY
      capital-mode: false
      logic-delete-value: 1
      logic-not-delete-value: 0
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: true
x-retry:
  lastDays: 30 # 拉取重试数据的天数
  retryPullPageSize: 100 # 拉取重试数据的每批次的大小
  nettyPort: 1788  # 服务端netty端口
  totalPartition: 32  # 重试和死信表的分区总数

##项目部署 如果你已经正确按照系统了,那么你可以输入

http://localhost:8080

会出现登陆页面: img.png

输入用户名: admin, 密码: 123456

组配置

通过新建按钮配置点开配置组、场景、通知界面 group_list.png

组配置

组名称: 名称是数字、字母、下划线组合最长64个字符长度 状态: 开启/关闭, 通过状态开启或关闭组状态 路由策略: 描述: 知道分区 : goup_config.png

场景配置

goup_config.png

通知配置

notify_config.png

重试列表

retry_task_list.png

重试日志列表

retry_log_list.png

死信队列列表

retry_dead_letter_list.png

用户列表

user_list.png

新增用户

user_add.png