zoukankan      html  css  js  c++  java
  • 前端调用接口成功但后端没收到请求

    环境描述:

    ​ 微服务技术栈: SpringCloud Alibaba

    ​ 网关: Gateway


    问题描述:

    ​ 前台发送的请求的响应码为200
    image

    ​ 具体响应内容:

    image

    ​ 后台的Controller层方法却没有进入

    ​ 注: 只有启动微服务项目中的B服务时,才会出现接口概率性调用异常,关闭B服务不会出现


    问题分析:

    ​ 因为所有的Controller层的接口都会出现此问题,可以断定与接口无关,所以决定先排查B服务与网关


    排查过程:

    1. 在网关配置的Fallback类上打上断点,查看是否是接口调用失败导致问题的出现

      @RestController
      public class FallbackController {
          /**
           * 全局熔断处理
           * @return
           */
          @RequestMapping("/fallback")
          public Mono<String> fallback() {
              return Mono.just("访问超时,请稍后再试!");
          }
      }    
      

      果然,断点卡在第9行上,并且返回值也与前台获得的相应内容一致

    2. 在网关配置的Filter类上打上断点,查看调用失败的接口信息

      @Component
      public class GlobalAccessTokenFilter implements GlobalFilter, Ordered 
          @Override
          public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
               String url = exchange.getRequest().getURI().getPath();
          }
      

      ​ 结果发现此方法一直在被调用,速度极快,并且几乎全是/login/xx与/getXXX接口,因为业务原因,作者十分

      确定这两个接口不会被频繁调用,所以判断是存在死循环在调用这两个接口

    3. 继续排查B服务,重点查找调用上述两个接口的方法,果然发现存在死循环(代码就不放了)


    解决方法:

    ​ 解决方法当然是干掉死循环了,不过还有另一种解决方法: 搭建集群。因为真实生产环境中此问题也完全有可能是并发量达到了gateway的上限造成的,那自然就需要对gateway服务做集群

    ​ 这里说一下openFeign如何配置gateway集群

    @FeignClient(value = "gateway服务名称", contextId = "xxx", fallbackFactory = "xxx")
    
    上述配置即可自动进行负载均衡转发到gateway服务上(注意: value属性值不可重复,否则项目会启动失败,如果需要配置多个FeignClient的话并且value值需要一样的话,请再额外配置contextId进行区分)
    

    @FeignClient常用配置

  • 相关阅读:
    paip.提升性能C#.NET程序内存占用过多以及OutOfMemory解决方法
    ATTILAX项目进展表VC425
    paip.VOB DVD视频的无损分割与截取
    paip.程序不报错自动退出的解决
    paip.TechExcel DevSuite IIS 应用配置
    paip.软件版本完善计划C426fromVC423
    paip.chrome使用ACTIVX 的总结
    PAIP批量改名JS实现
    Source Navigato rNG4.4在ubuntu的简单的安装
    QuartusII编译出错小小总结
  • 原文地址:https://www.cnblogs.com/llysc/p/15041832.html
Copyright © 2011-2022 走看看