最近在seata项目中遇到xid无法通过feign传递到其他微服务的情况。网上找了资料解决seata在Fegin开启熔断(Hystrix)微服务之间无法传递事务XID的问题以及无法传递oauth2 token的问题兼容Zipkin,由于该文章没有说到最重点的地方,所以一时还未发现问题在哪。

于是打断点跟踪,看到当前服务是有xid的,但是通过feign调用时,xid就不见了,感觉很诡异。又重启服务并debug,还是一样。折腾了好长时间都没有进展。后面想到,既然当前服务有xid,经过feign时就没有了,那么中间是不是 经过了销毁的步骤呢?于是在RootContext里面,给unbind方法打上断点,然后神奇的事情发生了:在经过当前服务有xid,SeataFeignClient中没有xid的步骤后,unbind又看到xid了。

神奇的地方就在于,为什么unbind步骤是在feign调用之后进行的呢?既然是在之后解绑,那么feign中为什么又没有这个xid呢?我想只有一个解释:两次获取xid不是在相同的上下文。
于是我把想法告诉了身边的大佬,此时他终于说出了问题的答案:hystrix有两种服务隔离模式:线程池隔离和信号量隔离,默认使用的是线程池隔离。这就导致了调用feign时使用的是不同线程,所以获取不到上一个线程中的xid。这就好办了,将hystrix的服务隔离模式改为信号量隔离。再调用,终于获取到了。


至此事情告一段落。

想想还可以从中学到的一些东西。
比如当时发现feign中无法获取到xid,后面还是花了很多时间去debug,去跟踪,但是仍然一无所获。其实到这里基本就可以断定,这条路走不通,应该换一个思路。而我却是在花了大量时间无所得之后,才突然间想到其他办法。这是一个无意识的,很被动的过程,造成了低效率。所以得到了一个经验——此路不通,马上换一个思路。
另一个经验就是,要有丰富的知识积累。当时找到unbind又能看到xid,其实已经很接近找到答案了,就像挖井一样,再挖几铲下去就要出水了。但是我还不知道Hystrix的线程池和信号量两种隔离模式,所以就离真相差那么一点点。

总之,以上还是挺有意思的一个过程。故有此文。

seata分布式事务项目中无法传递xid的问题相关推荐

  1. Springcloud+Seata+nacos 分布式事务项目搭建 AT模式

    前言 本文要求对Springcloud有一定了解,对分布式事务本身有一定认知,如果不了解微服务,建议先看看Spring Cloud的基本认识和使用Spring Cloud的基本教程,再回头学习本文 为 ...

  2. seata 分布式事务没有传递xid导致事务失效解决方案

    seata 分布式事务没有传递xid导致事务失效解决方案 当spring cloud 设置全局开启分布式事务,在调用分支事务没有传递xid,原因是feign或者http调用时候 header 没有pu ...

  3. SpringCloud微服务实战——搭建企业级开发框架(二十七):集成多数据源+Seata分布式事务+读写分离+分库分表

      读写分离:为了确保数据库产品的稳定性,很多数据库拥有双机热备功能.也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器:第二台数据库服务器,主要进行读的操作.   目前有多种方式实现读写分 ...

  4. springboot+dubbo+mybatisplus整合seata分布式事务

    介绍 默认采用AT模式的seata整合,项目已经传到码云,欢迎指点:https://gitee.com/itCjb/springboot-dubbo-mybatisplus-seata seata官网 ...

  5. Seata分布式事务模式(TA、TCC、XA、SAGA)工作机制

    文章目录 前言 分布式应用痛点 分布式事务解决方案 Seata Seata AT模式 前提 工作机制 一阶段 二阶段-提交 二阶段-回滚 Seata TCC模式 前提 工作机制 Seata Saga模 ...

  6. 全面剖析Seata 分布式事务 AT 与XA

    前言 昨天有小伙伴私信小编说想小编出一期Seata分布式事物XA与AT模式的解析,经过昨晚的熬夜加班整理,今天将为大家带来Seata 分布式事务 XA 与 AT 的全面剖析.文章分为:XA模式是什么? ...

  7. Seata分布式事务XA与AT全面解析

    Seata 分布式事务 XA与AT Seata 是一款开源的分布式事务解决方案,star高达17300+,社区活跃度极高,致力于在微服务架构下提供高性能和简单易用的分布式事务服务. 注:本期分享借鉴于 ...

  8. Seata 分布式事务的使用和原理浅析

    Seata 分布式事务的精简使用教程和原理浅析 一.说明 二.Seata 简介 2.1.Seata 是什么? 2.2.Seata 的整体架构 2.2.1.主要角色 2.2.2.整体架构和工作流程图 2 ...

  9. SpringCloud分布式事务,版本二:添加 Seata 分布式事务版本

    基于 Seata 1.4.0 版本 首先贴出此项目地址:Seata 分布式事务版本 先了未添加事务项目再看此版本:未添加事务版本 此文章是基于上一篇的项目基础上添加的内容,所以务必先看上一篇 Seat ...

最新文章

  1. 【2018年11月21日】煤炭行业的估值高度排名
  2. Python进阶(十四) logging标准库
  3. jQuery应用实例4:下拉列表
  4. Win10没有Realtek高清晰音频管理器怎么办?
  5. 网狐cocos2d-lua棋牌二次开发搭建教程
  6. android wifi热点 信道,wifi 热点配置最优信道(示例代码)
  7. 用手机打开word图表位置很乱_干货 | 论文格式调半天?Word攻略帮你统统都搞定...
  8. ios 裁剪框大小_ios – 如何将视频裁剪为特定大小?
  9. 2021kali系列 -- 破解无线密码
  10. grpc-go源码剖析七十四之什么情况下服务器端通知客户端,双方关闭链接?(goAway帧处理逻辑)
  11. 【已解决】PEP 8: W292 no newline at end of file等相关PEP 8错误与警告
  12. Android wifi 破解
  13. FineReport之localhost拒绝了我们的连接请求
  14. 1009 type C 与DP检测,USB3.0与PD协议
  15. php mysql utf 8_PHP+MySQL中对UTF-8,UTF8(utf8),set names gbk 的理解
  16. seo网站优化,网站SEO优化方案
  17. 吴磊《星汉灿烂》新角色贯穿主线 演技惊喜引期待
  18. 食品药品ERP系统仓库系统使用教程
  19. Windows端iCloud现严重问题:显示陌生人照片和视频
  20. Android 7 Nougat 源码目录结构

热门文章

  1. 德国光伏组件回收新政 企业应如何应对
  2. 创建rss源_如何为任何网站查找或创建RSS源
  3. 第一篇第二章火灾的基础知识
  4. etc/network/interfaces
  5. 2022年电工高级技师(一级)考点及答案
  6. 从互联网时代进入物联网时代
  7. 海康威视智能机器人泊车_黑科技!杭州首个自动泊车的机器人停车库今年内投用...
  8. 宽带运营商大数据和机器学习支出将突破500亿美元
  9. 努比亚z17 android8.1,努比亚Z17再获更新 极速体验Android 8.1
  10. linux shell 鼠标事件,Bash Shellshock事件:CVE-2014-6271资料汇总