SpringCloud Gateway 不能使用 Feign 吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Saxton
V2EX    Java

SpringCloud Gateway 不能使用 Feign 吗?

  •  
  •   Saxton Aug 26, 2021 5532 views
    This topic created in 1708 days ago, the information mentioned may be changed or developed.
    java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-11 at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:83) ~[reactor-core-3.4.9.jar:3.4.9] Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: Error has been observed at the following site(s): |_ checkpoint org.springframework.web.cors.reactive.CorsWebFilter [DefaultWebFilterChain] |_ checkpoint org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain] |_ checkpoint org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain] |_ checkpoint HTTP POST "/auth/authenticate" [ExceptionHandlingWebHandler] 

    这是最原始的报错,提示了不能阻塞,Feign 使用了 loadbalancer 负载均衡,请求默认用了 httpClient

    Supplement 1    Aug 30, 2021
    感谢 @Kyle18Tang 大佬,使用 reactive 的第三方版本解决问题了
    19 replies    2023-06-09 01:55:07 +08:00
    Kyle18Tang
        1
    Kyle18Tang  
       Aug 26, 2021
    哈哈哈,我正在迁移到 Gateway,一样的问题,用不了,换 WebClient 了。
    Saxton
        2
    Saxton  
    OP
       Aug 26, 2021
    @Kyle18Tang 我已经换成了 OKhttp 还是不行 无语死
    Kyle18Tang
        3
    Kyle18Tang  
       Aug 26, 2021
    @Saxton #2 不是 OkHttp 的问题,是 Feign 就不能用,只能换 WebClient 。
    Saxton
        4
    Saxton  
    OP
       Aug 26, 2021
    @Kyle18Tang 问题是我是按照其他人开源的项目改的,的确使用了 feign 难道是高版本不允许了吗
    zysuper
        5
    zysuper  
       Aug 26, 2021
    reactive 的框架用同步调用的 feign 你觉得合适吗?
    Kyle18Tang
        6
    Kyle18Tang  
       Aug 26, 2021   1
    @Saxton #4 他们项目 Cloud 版本是 2020 以下的?实在要用 Feign 可以试试 https://github.com/Playtika/feign-reactive
    Saxton
        7
    Saxton  
    OP
       Aug 26, 2021
    @Kyle18Tang 实锤了 我阅读了 2.0 和 3.0 版本的源代码,2.0 的时候使用了 TraceLoadBalancerFeignClient 这个类来达到负载均衡,但是在 3.0 版本这个类不见了,变成了 FeignBlockingLoadBalancerClient,这个类名就说明了这玩意是个阻塞玩意,也就是高版本的 feign 不能在 webflux 中继续使用了。。
    然后我以为换成 OKHTTP 能解决,但发现,当你换成 okhttp 其实还是被这个玩意包裹着,配置类代码如下:return new FeignBlockingLoadBalancerClient(delegate, loadBalancerClient, properties, loadBalancerClientFactory);
    delegate 变量就是 okhttp 的实例,是我太天真了 现在要么降版本要么别用 feign,但是降版本这种操作就算了,我还是把这个服务完全迁移到网关
    Saxton
        8
    Saxton  
    OP
       Aug 26, 2021
    @Kyle18Tang 还有一个版本就是把低版本的这个请求类拿过来 3.0 里用,直接 new 成 bean 会自动替换掉原有的 LoadBalancerClient,这样就可以避免使用阻塞的请求类,我准备来尝试一下,目前我不清楚为什么 3.0 版本这个类会消失,待我有空去阅读下升级日志
    Kyle18Tang
        9
    Kyle18Tang  
       Aug 26, 2021
    @Saxton #8 3.0 废了 Ribbon
    Saxton
        10
    Saxton  
    OP
       Aug 26, 2021
    @Kyle18Tang 好吧是我看错了,我发现问题所在了,之前的项目使用了 ribbon 提供的 LoadBalancerFeignClient,我这个项目我剔除 ribbon 依赖,使用了 loadbalancer 依赖,ribbon 的依赖携带的 client 默认支持阻塞,但 loadbalancer 携带的 client 是阻塞的,跟 feign 没有半毛钱关系,这是负载均衡导致的问题,如果想要网关使用 feign 就必须使用 ribbon 做负载器,但这玩意已经停更了,所以我打算自己写个非阻塞的 client,就能解决这个问题了
    zysuper
        11
    zysuper  
       Aug 26, 2021
    好奇 reactor-http-nio 被全部 blocking 会发生什么事情。
    Saxton
        12
    Saxton  
    OP
       Aug 26, 2021
    @zysuper 直接报错,详见 BlockingSingleSubscriber 类
    wm5d8b
        13
    wm5d8b  
       Aug 27, 2021 via Android
    不知道为啥,都在推 webflux 了,却没有 reactive 的 feign
    cslive
        14
    cslive  
       Aug 27, 2021
    用 openFeign 这个包,不要用 feign 这个包
    mezi04
        15
    mezi04  
       Aug 27, 2021
    nodododo
        16
    nodododo  
       Aug 27, 2021
    看你的头像然后再看文字会自动脑补出海绵宝宝的声音。。
    Saxton
        17
    Saxton  
    OP
       Aug 30, 2021
    @cslive openFeign 本身就是 feign 改了个名字而已 我用了楼上的大佬推荐的 feignreactive 解决问题了
    Saxton
        18
    Saxton  
    OP
       Aug 30, 2021
    @nodododo 哈哈哈哈
    HarrisonLee
        19
    HarrisonLee  
       Jun 9, 2023
    大佬你是不是用 feign 调用鉴权服务,另一个回答里也看到你了,你是怎么做的?网上都是一些在网关处进行鉴权的,你分享的那个项目( zhoutaoo/SpringCloud )中的 auth-client 也根本没有实现服务调用。
    About     Help     Advertise     Blog     API     FAQ     Solana     5573 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 85ms UTC 03:09 PVG 11:09 LAX 20:09 JFK 23:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86