SOFA WEEKLY | 每周精选,筛选每周精华问答 同步开源进展,欢迎留言互动
SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,也是在金融场景里锤炼出来的最佳实践。
SOFAStack 官网: https://www.sofastack.tech
SOFAStack: https://github.com/sofastack
每周读者问答提炼
欢迎大家向公众号留言提问或在群里与我们互动 我们会筛选重点问题 通过 “ SOFA WEEKLY ” 的形式回复
1、@薛帅领 提问:
多数据源切换后,增加事务但不起作用(切数据源是执行方法后才切换的),本地事务及 Seate 分布式事务也不行,这个有什么好的解决方案吗?
A:Spring 本地事务注解本身就不支持多数据源事务,且如果你开启了本地事务,之后并不会进入你的切换数据源的切面。 在多数据源下,去掉本地事务注解就好了。用 globaltransactional 注解在多数据源的入口加上,多个数据源都被 Seata 代理的话,就会保证多数据源的事务。
2、@李天宇 提问
如果在分布式事务中,另一个线程做批处理 update 之类的,是否会锁住呢?
A:不会,另一个线程也要记得加上 globaltransactional 注解就行了。在 a 线程要提交之前要去尝试拿到它修改数据的全局锁的,如果 a 拿到了,但是还没到二阶段提交,b 也是要去尝试拿,拿不到就会不执行 SQL,等待全局锁释放了,也就是 a 发起的事务结束了,b 才能执行 SQL 提交。这样就保证了利用全局锁(粒度行级),来达到隔离性。
Seata:https://github.com/seata/seata
相关推荐阅读
SOFA 项目进展
本周发布详情如下:
SOFA-Common-Tools 发布1.3.0 版本,主要变更如下:
- SOFA 线程池支持 ScheduledThreadPoolExecutor 与 ThreadPoolTaskScheduler
- 新增 SofaConfigs 支持统一的配置获取
- 新增 LogCode2Description 支持统一的错误码获取
- 重构线程池实现,支持更丰富的监控数据
- 所有组件统一 spce 属性获取逻辑
- 修复配置日志输出到控制台时不生效的问题
详细参考:https://github.com/sofastack/sofa-common-tools/releases/tag/v1.3.0
祝大家圣诞节快乐!