V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tuine
V2EX  ›  Java

spring boot 请求接口,时不时报 404,如何定位问题?

  •  
  •   tuine · 2021-06-30 09:48:44 +08:00 · 3807 次点击
    这是一个创建于 1229 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有没有 V 友碰到过的,偶尔会出现 404

    {
        "timestamp": "2021-06-29T06:46:35.477+0000",
        "status": 404,
        "error": "Not Found",
        "message": "No message available",
        "path": "/auth/info"
    }
    

    使用的nacos,但是此服务只启动了一个,yml 配置:

          routes:
            - id: auth-service
              uri: lb://auth-service
              predicates:
                - Path=/v1/auth/**
              filters:
                - StripPrefix=1
            - id: bus-service
              uri: lb://bus-service
              predicates:
                - Path=/v1/**
              filters:
                - StripPrefix=1
    
    第 1 条附言  ·  2021-07-01 10:53:47 +08:00

    增加了个链路追踪,发现路由应该是走了id: bus-service,/v1/**的规则,所以结论应该是:route的书写顺序并不能保证路由的匹配优先级。然后查询有order配置,增加上了,跑一段时间看看。

    15 条回复    2021-06-30 14:39:23 +08:00
    liian2019
        1
    liian2019  
       2021-06-30 09:54:18 +08:00
    是不是负载均衡的原因
    shanghai1943
        2
    shanghai1943  
       2021-06-30 09:58:45 +08:00
    最好提供一下架构信息以及相应的日志信息来排查分析,目前没有更多信息的话也看不出所在
    statement
        3
    statement  
       2021-06-30 10:16:06 +08:00
    是不是用了网关。 然后用服务名调用?
    tuine
        4
    tuine  
    OP
       2021-06-30 10:17:44 +08:00
    补充:
    spring boot: 2.2.6.RELEASE
    spring cloud: Hoxton.SR1
    网关使用 spring cloud gateway

    404NOT FOUND,暂时没有额外日志。

    GET: localhost:9000/auth/info?token=gNGLJLLZsluDsIQw 访问后偶然出现。
    auth-service,controller:

    ```java
    @RestController
    @RequestMapping("/auth")
    @RequiredArgsConstructor
    public class AuthController {

    private final AuthService authService;

    @GetMapping("info")
    public Result info(@RequestParam("token") String token) {
    Map<String, Object> stringObjectMap = authService.getInfo(token);

    return ResultGenerator.success(stringObjectMap);
    }
    }
    ```
    tuine
        5
    tuine  
    OP
       2021-06-30 10:19:44 +08:00
    @statement #3 对,走的 lb://auth-service
    tuine
        6
    tuine  
    OP
       2021-06-30 10:20:36 +08:00
    @liian2019 #1 有可能,但是我只启动了一个服务,偶尔出现很难测~
    statement
        7
    statement  
       2021-06-30 10:36:57 +08:00
    nacos 不知道 应该是类似的问题 建议试试 直接用 ip 调用。是不是就不会出现这个问题
    之前用 zuul 也遇到过同样问题 用地址访问没问题 用服务名会间歇性 404 。频率还很高 刷快一点 10 次里有 5 次 404

    解决办法:
    方式 1.用地址访问不用服务名访问
    zuul.routes.api-url.path=/api/**
    zuul.routes.api-url.url=http://127.0.0.1:9011/

    方式 2.在被调用的服务里开启 prefer-ip-address
    eureka.instance.prefer-ip-address=true
    eureka.instance.ipAddress=127.0.0.1
    demobin
        8
    demobin  
       2021-06-30 10:59:24 +08:00
    估计是有谁开发注册上 nacos 去了,然后负载到他那内网可能不通之类的。
    tuine
        9
    tuine  
    OP
       2021-06-30 11:04:07 +08:00
    @demobin #8 没,我进 nacos 看了,只有一个实例
    tuine
        10
    tuine  
    OP
       2021-06-30 11:04:19 +08:00
    @statement #7 我试试
    tuine
        11
    tuine  
    OP
       2021-06-30 11:12:43 +08:00
    @shanghai1943 #2 404 没有太详细的日志 😂
    leafre
        12
    leafre  
       2021-06-30 11:15:20 +08:00
    尝试调节 ribbon 参数
    wqhui
        13
    wqhui  
       2021-06-30 11:34:40 +08:00
    @demobin 这种不是 404,是接口超时
    tyit
        14
    tyit  
       2021-06-30 13:23:18 +08:00 via iPhone
    断点 Debug 一下
    tuine
        15
    tuine  
    OP
       2021-06-30 14:39:23 +08:00
    @tyit #14 不太频繁,几百次请求后能有连续的四五次,而且是测试环境
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   888 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:00 · PVG 05:00 · LAX 13:00 · JFK 16:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.