SDK 进阶用法

最近更新时间: 2024-06-12 15:06:00

使用场景

该任务指导您通过配置sdk的高级参数来更加灵活地控制dtf框架的行为。

本地多事务分组配置

DTF框架支持本地微服务里存在多个不同事务分组的主事务,可以通过@DtfTransactional注解里的groupId字段来设置分组id参数。这个方法适用于分组id不频繁更换的场景,分组id就和注解一起编译在代码里了。DTF SDK还提供了一种通过配置文件参数动态调整groupId的方法。

这里引入了一个bizId的概念,用于标记不同的业务函数,然后就可以在配置文件里通过设置bizId与groupId的映射来达到动态调整的目的了。

配置项 数据类型 必填 默认值 描述
dtf.env.biz.${bizId} String bizId对应的groupId,单客户端使用多个事务分组时可以配置多项

下面以order方法为例,演示该如何使用bizId配置:

@DtfTransactional(bizId="mybiz1")
@RequestMapping("/order")
public Boolean order(@RequestBody Order order) {
    // 执行业务逻辑或分支事务
}

首先我们将该事务标记为mybiz1,然后在配置文件里为他设置groupId为group-x3k9s0ns。

spring:
  application:
    name: app-test
dtf:
  env:
    groups:
      group-x3k9s0ns: 127.0.0.1:8080;127.0.0.1:8081;127.0.0.1:8082
    biz:
      mybiz1: group-x3k9s0ns
    secretId: SID
    secretKey: SKEY

如果@DtfTransactional注解里没有标记bizId,那将和原先的逻辑一致,通过dtf.env.groups查找配置。如果同时填写了bizId和groupId,将直接使用注解的groupId。

全局锁配置

全局锁是在FMT模式下用于事务隔离的锁,SDK提供了配置,用于调整锁的超时时间。

配置项 数据类型 必填 默认值 描述
dtf.env.globalLockWaitTimeout Integer 5000 全局锁等待超时时间,单位:ms
dtf.env.globalLockReleaseTimeout Integer 60000 全局锁释放超时时间,单位:ms

服务端地址发现

前面客户端通过dtf.env.groups配置来指定服务端tm的地址列表,但不能很好地支持服务端扩容等地址变更的场景。客户端需要修改并且重启配置才能连接上新的服务端实例。 为了解决该问题,DTF支持了服务端地址发现的能力。客户端填写一个固定的地址发现配置即可。

配置方式如下

dtf:
  env:
    discovery:
      type: builtin
      builtin:
        host: dtf-manager.tce.svc
        port: 9810
      groups:
        - group-qy9484ln
    secretId: sid
    secretKey: skey
  • 通过dtf.env.discovery.type指定服务发现类型,目前只支持builtin类型

  • 通过dtf.env.discovery.builtin.host port指定地址端口。在控制台的事务分组->基本信息中可以看到该地址

  • 通过dtf.env.discovery.groups填写事务分组列表