feign调用的客户端无法获取user信息

Blade 未结 1 464
891512143
891512143 2023-05-09 17:10

一、该问题的重现步骤是什么?

  1.  断点打在org.springblade.core.cloud.sentinel.BladeSentinelAutoConfiguration 第53行。

  2.  blade-example中的blade-seata-order服务配置日志级别为trace: 
    
    


  3. 启动 blade-example中的blade-seata-order服务 ,无法进去断点,无法创建 BladeFeignRequestInterceptor 的bean 

  4. 日志搜索 Negative matches 发现,BladeFeignRequestInterceptor被SeataFeignRequestInterceptor覆盖


    image.png

  5. 以上导致feign header设置拦截器失效


二、你期待的结果是什么?实际看到的又是什么?

    由于BladeFeignRequestInterceptor失效,无法设置header导致feign调用的下游服务无法获取上游传递的header(Blade-Auth,属于允许范围)


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

      bladex, 3.1.0 ,mac

四、请提供详细的错误堆栈信息,这很重要。

     image.png

五、若有更多详细信息,请在下面提供。

      BladeSentinelAutoConfiguration 的Feign拦截器与SeataFeignClientAutoConfiguration中feign拦截器冲突,导致feign调用的客户端无法获取user信息,还请官方修复。

1条回答
  •  admin
    admin (楼主)
    2023-05-09 23:59

    feign调用接口,推荐思路与RPC一致,将用户id通过feign传递,feign实现类获取id再调用方法得到User类。

    feign调用往往会有多层级的情况,带有长段的token请求头会降低并发性能,又因为feign为内部调用,所以直接传递userId是完全没问题的。

    再加上目前很多第三方组件都会有自定义的intercept,如果要复用bladex的默认配置,就需要拆开他们的源码进行二开然后覆盖,但是这样破坏性太大了。所以不推荐从请求头来传递参数,参数统统建议从feign的调用参数里传递。


    方式如下

    image.png

    0 讨论(2)
提交回复