必须使用代理数据源,有 3 种形式可以代理数据源:
依赖 seata-spring-boot-starter 时,自动代理数据源,无需额外处理。 依赖 seata-all 时,使用 @EnableAutoDataSourceProxy (since 1.1.0) 注解,注解参数可选择 jdk 代理或者 cglib 代理。 依赖 seata-all 时,也可以手动使用 DatasourceProxy 来包装 DataSource。
配置 GlobalTransactionScanner,使用 seata-all 时需要手动配置,使用 seata-spring-boot-starter 时无需额外处理。 业务表中必须包含单列主键,若存在复合主键,请参考问题 13 。 每个业务库中必须包含 undo_log 表,若与分库分表组件联用,分库不分表。 跨微服务链路的事务需要对相应 RPC 框架支持,目前 seata-all 中已经支持:Apache Dubbo、Alibaba Dubbo、sofa-RPC、Motan、gRpc、httpClient,对于 Spring Cloud 的支持,请大家引用 spring-cloud-alibaba-seata。其他自研框架、异步模型、消息消费事务模型请结合 API 自行支持。 目前AT模式支持的数据库有:MySQL、Oracle、PostgreSQL和 TiDB。 使用注解开启分布式事务时,若默认服务 provider 端加入 consumer 端的事务,provider 可不标注注解。但是,provider 同样需要相应的依赖和配置,仅可省略注解。 使用注解开启分布式事务时,若要求事务回滚,必须将异常抛出到事务的发起方,被事务发起方的 @GlobalTransactional 注解感知到。provide 直接抛出异常 或 定义错误码由 consumer 判断再抛出异常。,此回答整理自钉群“3群-Seata 开源讨论群”
事务分组:AT 模式下需要对分布式事务进行分组,同一组内的分布式事务使用相同的 XID。
分布式事务的开关:需要在配置文件中将分布式事务的开关打开。
数据库连接:需要将数据库连接池的最大连接数调整为 Seata 中的 AT 模式支持的最大连接数。
分布式事务超时:需要根据业务的需求来设置分布式事务的超时时间,以确保在一定时间内完成所有的操作。
分布式事务日志存储:配置 Seata 的事务日志存储的方式,以确保在事务提交时,日志正确存储。
分布式锁的使用:在 AT 模式下,需要使用 Seata 提供的分布式锁来实现事务的并发控制,以避免出现数据并发问题。
需要注意的是,在使用 Seata 的 AT 模式时,由于锁和日志的存储会对性能产生一定的影响,因此需要对业务进行一定的调整和优化,以确保 Seata 的使用不会对业务产生过多的性能开销。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。