SDK 进阶用法
最近更新时间: 2025-01-15 17:01: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填写事务分组列表